2019-05-24 04:49:46 UNSELECTED

Unknown type code

Copy Copied! Full
#include <bits/stdc++.h> using namespace std; const long long mod = 1e9+7; long long dp[101][5][5][5]; //文字数 最後から 3 2 1文字目の3つ //dp[10][3][2][2]は10文字で最後が322の文字数 int main(void){ int N; cin >> N; //長さ0の文字列は1である //0,1,2に関する制約しかないので //Sは333Sと考えてもよい //iが文字列の文字数 dp[0][4][4][4]=1; for(int i=0;i<N;i++){ //jが最後から3文字目の文字 for(int j=0;j<4;j++){ //kが最後から2文字目の文字 for(int k=0;k<4;k++){ //lが最後から1文字目の文字 for(int l=0;l<4;l++){ //条件に当てはまるものがないときcontinue; if(dp[i][j][k][l]==0)continue; //新しく追加する文字 for(int a=0;a<4;a++){ if(a==2&&k==0&&l==1)continue; if(a==2&&k==1&&l==0)continue; if(a==1&&k==0&&l==2)continue; if(a==2&&j==0&&l==1)continue; if(a==2&&j==0&&k==1)continue; dp[i+1][k][l][a]+=dp[i][j][k][l]; dp[i+1][k][l][a]%=mod; } } } } } long long ans = 0; for(int i=0;i<4;i++)for(int j=0;j<4;j++)for(int k=0;k<4;k++){ ans+=dp[N][i][j][k]; ans%=mod; } cout << ans << endl; }
RECOMMEND