题目:
小瓜想走上一个一共有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;
}
运行结果: