听取WA一片~
查看原帖
听取WA一片~
990027
Rain2012楼主2024/8/5 14:14
#include<bits/stdc++.h>
using namespace std;
int n,ans,vis[25],mt[25][25];
char c;
string s[25];
int far(int x, int y)
{
    int cnt = 0,ans = 0;
    for(int i = 0;i < min(s[x].size(),s[y].size());i++)
    {
        if(s[x][s[x].size()-1] == s[y][i])
        {
            for(int k = 0;k <= i;k++)
            {
                if(s[x][s[x].size()-k-1] != s[y][i-k]) break;
                cnt++;
            }
        }
        ans = max(cnt,ans);
        cnt = 0;
    }
    return ans;
}
int len;
void dfs(int l)
{
    for(int i = 1;i <= n;i++)
    {
        if(vis[i] < 2 && mt[l][i] && mt[l][i] != s[l].size() && mt[l][i] != s[i].size())
        {
            vis[i]++;
            len += s[i].size()-mt[l][i];
            dfs(i);
            len -= s[i].size()-mt[l][i];
            vis[i]--;
        }
    }
    ans = max(ans,len);
}
int main()
{
    cin>>n;
    for(int i = 1;i <= n;i++)
    {
        cin>>s[i];
    }
    cin>>c;
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= n;j++)
        {
            mt[i][j] = far(i,j);
        }
    }
    for(int i = 1;i <= n;i++)
    {
        if(s[i][0] == c)
        {
            dfs(i);
        }
    }
    cout<<ans;
}

救(嘶吼)

2024/8/5 14:14
加载中...