83分求大犇指导
查看原帖
83分求大犇指导
524160
Lin_Master楼主2024/5/4 20:15
#include <iostream>
#include <string>

using namespace std;

int n;
string s[25];
string st;
int ans;
int vis[25];

int checklink (string a, string b) {
    for (int i = 1; i < min(a.length(), b.length()); ++i) {
        bool flag = 1;
        for (int j = 0; j < i; ++j) {
            if (a[a.length() - i + j] != b[j]) {
                flag = 0;
            }
        }
        if(flag) return i;
    }
    return 0;
}

void dfs (string now, int lnow) {
    ans = max(lnow, ans);
    for (int i = 0; i <= n; ++i) {
        if (vis[i] >= 2) {
            continue;
        }
        int leng = checklink(now, s[i]);
        if (leng > 0) {
            vis[i] ++;
            dfs(s[i], lnow + s[i].length() - leng);
            vis[i] --;
        }
    }
}

int main () {
    cin >> n;
    for (int i = 0; i <= n; ++i) {
        cin >> s[i];
    }
    vis[0] = 1;
    dfs(s[0], s[0].length());
    cout << ans;
    return 0;
}
2024/5/4 20:15
加载中...