http://oj.tsinsen.com/A1126
分析:这题要真按题意来恐怕难得很..我只能随便搜一下了,看来测试数据很水。这题不知道有什么好的算法,反正不好想..
代码:
#include "bits/stdc++.h"
using namespace std;
int Len[50], Used[50], Res, n;
char s[50][105];
void Dfs(int d, int CurLen)
{
for (int i = 1; i <= n; ++i) if (Used[i] < 2)
for (int j = 0; j < Len[d]; ++j) {
if (s[i][0] != s[d][j]) continue;
int u = 1, v = j + 1;
while (v < Len[d] && !(s[i][u] != s[d][v])) ++u, ++v;
if (v < Len[d]) continue;
Used[i] += 1;
Dfs(i, CurLen + Len[i] - u);
Used[i] -= 1;
}
Res = max(Res, CurLen);
}
int main() {
scanf("%d",&n);
for (int i = 1; i <= n; ++i) {
scanf("%s",s[i]);
Len[i] = strlen(s[i]);
}
scanf("%s",s[0]);
Dfs(0, Len[0] = 1);
printf("%d", Res);
return 0;
}