題目鏈接:uva 11127 - Triple-Free Binary Strings
題目大意:給出一個串,有0,1,*,然後*的位置可以填0或1,問組成的串中不存在連續三個子串相同的串的個數。
解題思路:遞歸求解,可以剪枝對與當前位置,如果前面的構成已經有存在連續的三個子串相同,可以直接return。
#include#include const int N = 50; int n; char tmp[N]; bool judge(int s, int d) { int t = (1< >d; int b = s & t; s = s>>d; int c = s & t; return a == b && b == c; } int dfs(int s, int d) { int k = d / 3, t = n-d-1; for (int i = 1; i <= k; i++) { if (judge(s>>(t+1), i)) return 0; } if (d == n) { return 1; } else if (tmp[d] == '0') { return dfs(s, d + 1); } else if (tmp[d] == '1') { return dfs(s+(1<