鄙人不才,只过了80%。
背包问题的思路。
#include<bits/stdc++.h>
using namespace std;
int main( )
{
int n; cin>>n;
int a[10000000],f1=1,f2=1,fn=2;
a[f1]=1,a[f2]=1,a[fn]=2;
while(fn<=n){
fn=f1+f2;
a[fn]=1;
for(int i=f2+1;i<fn;i++){
a[i]=a[f2]+a[i-f2];
//cout<<i<<"="<<a[i]<<endl;
}
//cout<<fn<<"="<<a[fn]<<endl;
f1=f2;
f2=fn;
}
cout<<a[n];
return 0;
}