1 2
3 6
以前做过的题,这次重做,仍然先想到了dfs,然而超时,跑到20+就跑不动了
#include<iostream> using namespace std; int book[51]={0}; int color[4]={0,1,2,3}; int step=0,n,cnt=0; void dfs(int step) { if(step==n+1) { cnt++; return; } for(int i=1;i<=3;i++) { if(book[step]==0) { if(step==1) { book[step]=color[i]; dfs(step+1); } else if(step>1&&step<n) { if(book[step-1]!=color[i]) { book[step]=color[i]; dfs(step+1); } } else if(step==n) { if(book[step-1]!=color[i]&&color[i]!=book[1]) { book[step]=color[i]; dfs(step+1); } } book[step]=0; } } return; } int main() { while(cin>>n) { for(int i=1;i<=50;i++) book[i]=0; cnt=0; dfs(1); cout<<cnt<<endl; } return 0; }
#include<iostream> using namespace std; int main() { long long num[51]={0,3,6}; for(int i=3;i<=50;i++) { num[i]=2*num[i-1]; if(i%2) num[i]-=6; else num[i]+=6; } int n; while(cin>>n) { cout<<num[n]<<endl; } return 0; }