題目:
小瓜想走上一個一共有n級的台階,由於小瓜的腿長比較特殊,他一次只能向上走1級或者3級或者5級台階。小瓜想知道他有多少種方法走上這n級台階,你能幫幫他嗎?
Input
一行一個整數n(n<=100000),表示一共有n級台階。
Output
一行一個整數,表示小瓜上台階的方案數對100003取余的結果。
Sample Input
3
Sample Output
思路:
運用動態規划的思想,假如一共有n階台階,因為只能走1、3、5級,那么到達第n階台階就有三種情況,即當到達(n-1)時走1階,到達(n-3)時走3階,到達(n-5)時走5階,依此類推,要求是前提是n>5.如果n<5,那么在可接受范圍內,計算作為初始值。當然還有最重要一步的就是對每個求得得數求余,避免數據過大溢出。
#include<iostream>
using namespace std;
long step[1000003] = {0};
int main(){
int N;
cin>>N;
if(N<=0){
return 0;
}
step[0] = 1;
step[1] = 1;
step[2] = 2;
step[3] = 3;
step[4] = 5;
if(N<=5){
cout<<step[N-1]<<endl;
return 0;
}
for(int i=5;i<N;i++){
step[i]= (step[i-1]+step[i-3]+step[i-5])%100003;
}
cout<<step[N-1]<<endl;
}
運行結果: