您的位置:首页 > 其它

luogu1019【2000提高】单词接龙(字符串+dfs)

2017-08-08 23:14 471 查看
没啥可说的。。。就去dfs就好了。。

upd:最新版看这里:传送门

#include<cstdio>
#include<cstring>
int n,a[21],ans=0,sum=0;
char s[21][21],ss[1];
int cmp(int i,int k){
int x=0;
if(a[i]>=2) return x;
for(int j=1;s[k][j]!=0;j++){
if(s[i][0]==s[k][j]){
int xx=strlen(s[k])-j;
if(xx>=strlen(s[i])) xx=0;
else{
for(int ii=1;ii<xx;ii++){
if(s[k][j+ii]!=s[i][ii]) xx=0;
}
}
if(xx!=0) x=xx;
}
}
return x;
}
void dfs(int k){
for(int i=1;i<=n;i++){
int x=cmp(i,k);
if(x!=0){
sum=sum+strlen(s[i])-x;
a[i]++;
if(sum>ans) ans=sum;
dfs(i);
sum=sum-strlen(s[i])+x;
a[i]--;
}
}
}
int main(){
//freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",&s[i]);
a[i]=0;
}
scanf("%s",ss);
for(int i=1;i<=n;i++){
if(s[i][0]==ss[0]){
sum+=strlen(s[i]);
if(sum>ans) ans=sum;
a[i]++;
dfs(i);
sum-=strlen(s[i]);
a[i]--;
}
}
printf("%d",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: