33分求助
查看原帖
33分求助
635555
Pol_Pot楼主2023/3/1 17:35

rt,不知道哪里错了

#include<bits/stdc++.h> 
using namespace std;
int n,ans,now,cov[25][25];
string word[25];
char a;

int vis[25];
int link(int x,int y){
    int n1=word[x].size();
    int n2=word[y].size();
    int cur=0;
    int t=0;
    while(t==0&&cur<n1&&cur<n2){
        cur++;
        string a1=word[x].substr(n1-cur,cur);
        string b1=word[y].substr(0,cur);
        if(a1==b1){
            t=1;
        }
    }
    if(cur==n1||cur==n2){
        return 0;
    }
    return cur;
}
void dfs(int pre){
    int t=0;
    for(int i=1;i<=n;i++){
        if(cov[pre][i]==0){
            continue;
        }
        if(vis[i]>=2){
            continue;
        }
        now+=word[i].size()-cov[i][pre];
        vis[i]++;
        t=1;
        dfs(i);
        now+=cov[i][pre]-word[i].size();
        vis[i]--;
    }
    if(t==0){
        ans=max(ans,now);
    }
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>word[i];
    }
    cin>>a;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
        cov[i][j]=link(i,j);
        }
    }
    for(int i=1;i<=n;i++){
        if(word[i][0]==a){
            vis[i]++;
            now=word[i].size();
            dfs(i);
            vis[i]=0;
        }
    }
    cout<<ans;
    return 0;
}
2023/3/1 17:35
加载中...