http://ac.jobdu.com/problem.php?pid=1389
这样的题只要分类不要重复就没问题了。
可以分为,
第一次跳0步,也就是直接跳到终点。
第一次跳1步,然后在跳f(i-1)
第一次跳2步,然后在跳f(i-2)
...
DP我果断是弱爆了,第一次写居然把第一次跳的那个+1,想了下A了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define LL long long
const int SIZE = 50+1;
int n;
LL f[SIZE];
void init(){
f[1]=1;
f[0]=0;
for(int i=2;i<=50;i++){
f[i] = 1;
for(int j=1;j<i;j++){
f[i] += f[i-j];
}
}
}
int main(){
init();
while(cin >> n){
cout << f[n] << endl;
}
return 0;
}