1. 程式人生 > >【CCF】有趣的數 數位dp

【CCF】有趣的數 數位dp

clu 有趣 sizeof clas tdi return CA queue In

【思路】

dp[i][j]表示前i個數為第j種狀態,考慮6種狀態

0: 出現且僅出現 2

1: 出現且僅出現 2 0

2: 出現且僅出現 2 3

3: 出現且僅出現 2 0 1

4: 出現且僅出現 2 0 3

5: 出現且僅出現 2 0 1 3

【AC】

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<string>
 5 #include<cmath>
 6 #include<algorithm>
 7 #include<queue>
 8
#include<map> 9 using namespace std; 10 const int mod=1e9+7; 11 const int maxn=1e3+2; 12 int dp[maxn][6]; 13 void pre(){ 14 memset(dp,0,sizeof(dp)); 15 dp[1][0]=1; 16 for(int i=2;i<maxn;i++){ 17 dp[i][0]=1; 18 dp[i][1]=((dp[i-1][1]*2)%mod+dp[i-1][0])%mod; 19 dp[i][2
]=(dp[i-1][2]+dp[i-1][0])%mod; 20 dp[i][3]=(dp[i-1][1]+(dp[i-1][3]*2)%mod)%mod; 21 dp[i][4]=((dp[i-1][1]+dp[i-1][2])%mod+(dp[i-1][4]*2)%mod)%mod; 22 dp[i][5]=((dp[i-1][3]+dp[i-1][4])%mod+dp[i-1][5]*2%mod)%mod; 23 } 24 } 25 int n; 26 int main(){ 27 pre(); 28 while(~scanf("
%d",&n)){ 29 printf("%d\n",dp[n][5]); 30 } 31 return 0; 32 }

【CCF】有趣的數 數位dp