rt,下载了样例2,本应输出19,输出了36
重叠部分我试过,没有出错
请大佬们帮我看一下是哪里出错了,谢谢大佬们的关注
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
string s1[30],s2;
long long cnt[30][30],vis[30],n,ans=0,ans1=0;
char ch;
long long cd(string a,string b)
{
long long len,len1,len2,e=0,ans2=0;
len=min(a.length(),b.length());
len1=a.length()-len;
len2=b.length()-len;
a=a.substr(len1,len);
b=b.substr(0,len);
for(int i=1;i<=len;i++)
{
if(a.substr(a.size()-i,i)==b.substr(0,i)){
if(i!=len) return i;
else return 0;
}
}
}
void dfs(int k,int ans1)
{
if(ans1>ans)
{
ans=ans1;
}
vis[k]++;
for(int i=0;i<n;i++)
{
if(vis[i]<2&&cnt[k][i]>0)
{
dfs(i,ans1+s1[i].length()-cnt[k][i]);
}
}
vis[k]--;
}
int main()
{
scanf("%lld",&n);
for(int i=0;i<n;i++)
{
cin>>s1[i];
}
cin>>ch;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cnt[i][j]=cd(s1[i],s1[j]);
}
}
for(int i=0;i<n;i++){
if(s1[i][0]==ch){
ans1+=s1[i].length();
dfs(i,ans1);
}
}
printf("%lld",ans);
return 0;
}