蒟蒻求助,51pts
查看原帖
蒟蒻求助,51pts
633466
LiaoYF1楼主2022/8/11 11:30
#include<iostream>
#include<string>
using namespace std;
string s[25];
int vis[25];
int ans,n;
int find(string s1,string s2){
    int len1=s1.size(),len2=s2.size();
    for(int i=min(len1,len2);i>=1;i--){
        int flag=1;
        for(int j=i-1;j>=0;j--){
			if(s1[len1-i+j]!=s2[j]){
                flag=0;
                break;
            }
        }
		if(flag==1)return i;
    }
    return 0;
}
void dfs(string str,int len) {
	ans=max(ans,len);
	for(int i=0;i<n;i++) {
		if(vis[i]>=2)continue;
		int t=find(str,s[i]);
		if(t>0){
			vis[i]++;
			dfs(s[i],len+s[i].length()-t);
			vis[i]--;
		}
	}
}
int main(){
    cin>>n;
    for(int i=0;i<=n;i++){
        cin>>s[i];
    }
    dfs(s[n],1);
    cout<<ans;
    return 0;
}

前三WA,后三AC

2022/8/11 11:30
加载中...