小红在爬楼梯,每次她可以上1节或者2节或者3节,但是上完2节或者3节后,会很累,下次只能上一节,问爬到n节一共有多少种方案。
n<=80
DP问题,解法如下
#include<iostream>
#include<cstring>
using namespace std;
const int N = 90;
int f[N];
long long cmilb(int n){
long long f[80];
memset(f, 0, sizeof f);
f[0] = 1;
for(int i=1;i<=n;i++){
f[i] += f[i-1];
if(i>=3) f[i]+=f[i-3];
if(i>=4) f[i]+=f[i-4];
}
return f[n];
}
int main(){
for(int i=1;i<80;i++){
printf("%lld\n", cmilb(i));
}
return 0;
}