内网200题纪念
题目描述
红、黄、蓝、绿4种颜色围成长度为N(N<=30)的一圈(位置编号为1、2、…、N),不能有一种颜色是连续3个,共有多少种方案?
插头DP(啥,你居然说这是插头DP?
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 long long n,ans=0,f[31][4][4]; 5 int main() 6 { 7 cin>>n; 8 if (n>=2) 9 { 10 for (int i=0;i<4;i++) for (int j=0;j<4;j++) 11 { 12 memset(f,0,sizeof(f)); 13 f[0][i][j]=1; 14 for (int k=1;k<=n;k++) for (int a=0;a<4;a++) for (int b=0;b<4;b++) for (int c=0;c<4;c++) 15 if (a!=b||b!=c) f[k][b][c]+=f[k-1][a][b]; 16 ans+=f[n][i][j]; 17 } 18 } 19 if (n==2) ans=16; 20 if (n==1) ans=4; 21 cout<<ans<<endl; 22 }