【codevs1065】01字串
阿新 • • 發佈:2018-12-07
題目大意:輸出僅由 0 和 1 組成的長度為 N 的字串個數,並且其中不能含有 3 個連續的相同子串。
題解:資料太水,正規解法應該是列舉字尾進行判斷。
程式碼如下
#include <bits/stdc++.h> using namespace std; const int maxn=31; int n,s[maxn],ans; void dfs(int cur){ if(cur==n+1){ ++ans; return; } for(int i=0;i<=1;i++){ s[cur]=i; bool ok=1; for(int j=1;3*j<=cur;j++){ bool flag=1; for(int k=0;k<j;k++) if(s[cur-k]^s[cur-j-k]||s[cur-j-k]^s[cur-2*j-k]||s[cur-k]^s[cur-2*j-k]){ flag=0; break; } if(flag){ ok=0; break; } } if(ok)dfs(cur+1); } } int main(){ scanf("%d",&n); if(!n)return puts("0"),0; dfs(1); printf("%d\n",ans); return 0; }