您的位置:首页 > 其它

JOJ 2391 words

2007-08-05 22:00 411 查看
大家还记得这道题吗?这是我们集训第一次在吉大网络赛遇到的第一题。问题是,给你一系列的word,从中任选一个做为游戏的开始,选种后,以后选单词的原则就是首字母和上次所单词的尾字母相同,这样一直进行下去,知道找不到毛组要求的单词,这样选中的单词的长度和记为游戏的复杂度,求所有情况中复杂度的最大值。

开始的时候我的思路是:从中按顺序选择,如过选一的复杂度不够大就在选下一个,知道把所有的情况遍历一遍。也就是搜索把。当时没做出来,现在弥补一下,附上我的code:
此题链接:http://acm.jlu.edu.cn/joj/showproblem.php?pid=2391&off=2300

#include<iostream>
int max;
typedef struct{
char ch[101];
int f;
}martrix;
int find(martrix a[],int x,int n){
a[x].f=0;
char t=a[x].ch[strlen(a[x].ch)-1];
int i;
for(i=0;i<n;i++){
if(a[i].f&&t==a[i].ch[0])
return strlen(a[i].ch)+find(a,i,n);
}
return 0;
}
int main(){
int n,i,j;
martrix a[12];
while(scanf("%d",&n)!=-1){
i=0;
while(i<n){
scanf("%s",a[i].ch);
a[i].f=1;
i++;
}
int max=0,s;
for(i=0;i<n;i++){
s=strlen(a[i].ch)+find(a,i,n);
if(s>max)
max=s;
for(j=0;j<n;j++)
a[j].f=1;
}
printf("%d\n",max);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: