GDUT 校赛01 dp

dp记录的是不是11串

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 using namespace std;
 8 const int maxn=1000005;
 9 const int mod=1000000007;
10 int n,m,t;
11 int dp[maxn][2],sum[maxn];
12 void init()
13 {
14     memset(dp,0,sizeof(dp));
15     dp[1][0]=dp[1][1]=1;
16     sum[1]=2;
17     for(int i=2;i<=maxn;i++)
18     {
19         dp[i][0]=dp[i-1][0]+dp[i-1][1];
20         dp[i][0]%=mod;
21         dp[i][1]=dp[i-1][0];
22         dp[i][1]%=mod;
23         sum[i]=sum[i-1]*2;
24         sum[i]%=mod;
25     }
26 }
27 int main()
28 {
29     int i,j,k;
30     #ifndef ONLINE_JUDGE
31     freopen("1.in","r",stdin);
32     #endif
33     scanf("%d",&t);
34     init();
35     while(t--)
36     {
37         scanf("%d",&n);
38         int ans=(sum[n]-dp[n][0]-dp[n][1])%mod;
39         printf("%d\n",(ans+mod)%mod);
40     }
41     return 0;
42 }

 

posted @ 2015-03-22 11:12  miao_a_miao  阅读(115)  评论(0编辑  收藏  举报