pku1699 Best Sequence (搜索)

 求多个子串的最短父串,

 

#include <iostream> #include <string.h> using namespace std; char str[10][22]; bool flag[10]; char res[220]; int ans, n; void search(int depth, int curlen) { if (curlen > ans) return; if (depth >= n) { if (curlen < ans) ans = curlen; return; } int i, j, len, same = 0; for (i=0; i<n; i++) { if (!flag[i]) //如果字符串i还没加入 { flag[i] = true; //加入字符串i len = strlen(str[i]); same = 0; if (curlen != 0) { for (j=len; j>=1; j--) { if (strncmp(res+curlen-j, str[i], j) == 0) { same = j; break; } } } strcpy(res+curlen-same, str[i]); search(depth+1, curlen+len-same); flag[i] = false; res[curlen] = 0; } } } int main() { int t, i, j; cin >> t; while (t--) { cin >> n; for (i=0; i<n; i++) cin >> str[i]; memset(flag, 0, sizeof(flag)); memset(res, 0, sizeof(res)); ans = 2000; search(0, 0); cout << ans << endl; } }

你可能感兴趣的:(search)