思路
这是一道递推的题目,坑点在于洛谷上的题面没有给出最后的答案需要答案对 。
至于怎么递推呢?我们先手动算一下几个数对应的答案。
不难发现,我们想要知道一个数 的累加方法,就要知道 和 的累加方法。若以 储存 的累加方法,则有 。
代码
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
const int MOD=1e9+7;
int ans[MAXN],ask[MAXN],m=0;
long long t;
int main(){
ans[1]=0,ans[2]=1,ans[3]=1;
cin>>t;
for (int i=1;i<=t;i++){
cin>>ask[i];
m=max(m,ask[i]);
}
for (int i=4;i<=m;i++){
ans[i]=(ans[i-3]+ans[i-2])%MOD;
}
for (int i=1;i<=t;i++){
cout<<ans[ask[i]]<<endl;
}
return 0;
}