题意:求长度为n的1和0组成的序列中没有101的个数。
思路:dp
错误:把n=1的时候算成1了。。
代码如下:
#include<cstdio> #include<iostream> #include<cstring> using namespace std; const int mod=9997; const int maxn=10005; int dp[maxn][3][3]; int main(){ // freopen("data.txt","r",stdin); int n; memset(dp,0,sizeof(dp)); dp[2][0][1]=1; dp[2][0][0]=1; dp[2][1][0]=1; dp[2][1][1]=1; for(int i=3;i<=10001;++i) { dp[i][0][1]=dp[i-1][0][0]%mod; dp[i][0][0]=(dp[i-1][0][0]+dp[i-1][1][0])%mod; dp[i][1][0]=(dp[i-1][0][1]+dp[i-1][1][1])%mod; dp[i][1][1]=(dp[i-1][1][1]+dp[i-1][0][1])%mod; } while(scanf("%d",&n)&&(n!=-1)) { if(n==1){printf("2\n");continue;} printf("%d\n",(dp[n][0][0]+dp[n][0][1]+dp[n][1][0]+dp[n][1][1])%mod); } return 0; }