递推问题必须搞清楚问题的递推公式
i
1 #1
2
1 #2
3
1 #2
4
4 2 1
2 1
1 #4
5
5 2 1
2 1
1 #4
6
6 3 1
3 1
6 2 1
2 1
1 #6
7
7 3 1
3 1
7 2 1
2 1
1 #6
显然可看出(当然,我第一次花了很久才懂)
if(i%2!=0)
f[i]=f[i-1];
else
f[i]=f[i-1]+f[i/2];
递推关系式一旦写出,问题就迎刃而解了
AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,f[1001],n;
f[0]=1;f[1]=1;
cin>>n;
for(i=2;i<=n;i++){
if(i%2!=0){
f[i]=f[i-1];
}else{
f[i]=f[i-1]+f[i/2];
}
}
cout<<f[n];
}