51ptsWA!求助大佬
查看原帖
51ptsWA!求助大佬
359430
江户川コナン楼主2021/11/6 16:43

不知道为什么错了。求助大佬! 代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int ans=-0x3f3f3f3f;
const int maxn=25;
string x[maxn];
int b[maxn];
int h[maxn][maxn];
int check(int i,int j){
    if(x[i].size()>=x[j].size()){
        if(x[i].substr(x[i].size()-x[j].size(),x[j].size())==x[j]){
            return 0;
        }
    }else{
        if(x[j].substr(x[j].size()-x[i].size(),x[i].size())==x[i]){
            return 0;
        }
    }
    for(int k=1;k<min(x[i].size(),x[j].size());k++){
        if(x[i].substr(x[i].size()-k,k)==x[j].substr(0,k)){
            return k;
        }
    }
    //if(i==1&&j==2) cout<<1<<endl;
    return 0;
}
void dfs(int k,int sum,string str){
    if(sum>ans){
        //cout<<str<<endl;
        ans=sum;
    }
    for(int i=1;i<=n;i++){
        if(b[i]&&h[k][i]>0){
            b[i]--;
            dfs(i,sum+x[i].size()-h[k][i],str.substr(str.size()-1-h[k][i],h[k][i])+x[i]);
            b[i]++;
        }
    }
}
int main(){
    cin>>n;
    char z;
    for(int i=1;i<=n;i++){
        cin>>x[i];
    }
    cin>>z;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(i==j) continue;
            h[i][j]=check(i,j);
            
        }
    }
    /*for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<h[i][j]<<" ";
        }
        cout<<endl;
    }*/
    for(int i=1;i<=n;i++){
        if(x[i][0]!=z) continue;
        for(int i=1;i<=n;i++){
            b[i]=2;
        }
        b[i]--;
        dfs(i,x[i].size(),x[i]);
    }
    cout<<ans<<endl;
    return 0;
}
2021/11/6 16:43
加载中...