1190上台阶
卡了6次…
注意认真推导递推式f[i]=f[i-1]+f[i-2]+f[i-3]
我还是用的平常的做法,三个循环,输入计算输出,然后开两个一位数组,但是可想而知,这种做法多一个循环多一个数组,在时间空间上面都不优秀,所以需要进行优化
进行计算的递推数组f没办法优化,但是输入的n可以省去,同时也会省去一个循环,先计算,然后循环输入在线输出
#include<iostream>
#include<cstdio>
using namespace std;
int n;
long long f[size];
int a;
int main()
{
f[1]=1,f[2]=2,f[3]=4;
for(int i=4;i<=70;i++)
{
f[i]=f[i-1]+f[i-2]+f[i-3];
}
while(scanf("%d",&a)==1&&a)
{
cout<<f[a]<<endl;
}
return 0;
}