描述
风之子刚走进他的考场,就……
花花:当当当当~~偶是魅力女皇——花花!!^^(华丽出场,礼炮,鲜花)
风之子:我呕……(杀死人的眼神)快说题目!否则……-_-###
花花:……咦~~好冷~~我们现在要解决的是魔族的密码问题(自我陶醉:搞不好魔族里面还会有人用密码给我和菜虫写情书咧,哦活活,当然是给我的比较多拉*^_^*)。魔族现在使用一种新型的密码系统。每一个密码都是一个给定的仅包含小写字母的英文单词表,每个单词至少包含1个字母,至多75个字母。如果在一个由一个词或多个词组成的表中,除了最后一个以外,每个单词都被其后的一个单词所包含,即前一个单词是后一个单词的前缀,则称词表为一个词链。例如下面单词组成了一个词链:
i
int
integer
但下面的单词不组成词链:
integer
intern
现在你要做的就是在一个给定的单词表中取出一些词,组成最长的词链,就是包含单词数最多的词链。将它的单词数统计出来,就得到密码了。
风之子:密码就是最长词链所包括的单词数阿……
花花:活活活,还有,这些文件的格式是,第一行为单词表中的单词数N(1<=N<=2000),下面每一行有一个单词,按字典顺序排列,中间也没有重复的单词咧!!你要提交的文件中只要在第一行输出密码就行啦^^看你长得还不错,给你一个样例吧:
样例1
样例输入1
5
i
int
integer
intern
internet
样例输出1
4
限制
各个测试点1s
来源
Vivian Snow
From 正·蠢盟演义——战略版 Fools-League Tactics
1 #include <iostream> 2 #include <cstdio> 3 #include <stdlib.h> 4 #include <algorithm> 5 #include <math.h> 6 #include <string.h> 7 8 using namespace std; 9 10 int f[2002];//f[y]表示以y为结尾的最长词链 11 char word[2002][80]; 12 13 int main() 14 { 15 int n,max0=0;//n个单词 16 cin>>n; 17 for(int i=1;i<=n;i++) 18 { 19 scanf("%s",word[i]); 20 } 21 for(int i=2;i<=n;i++) 22 { 23 int ll=strlen(word[i]); 24 for(int j=1;j<=i-1;j++) 25 { 26 int flag=0; 27 if(ll>strlen(word[j])) 28 { 29 flag=1; 30 for(int k=0;word[j][k]!=‘\0‘;k++) 31 { 32 if(word[j][k]!=word[i][k]) 33 { 34 flag=0; 35 break; 36 } 37 } 38 } 39 if(flag) 40 { 41 f[i]=max(f[i],f[j]+1); 42 max0=max(max0,f[i]); 43 } 44 } 45 } 46 printf("%d\n",max0+1); 47 return 0; 48 }
最长上升子序列
这个系列的题描述都好魔性……
是只有Qt在数组开大的时候会卡死在那吗-_-||