1. 程式人生 > >[vijos p1028] 魔族密碼

[vijos p1028] 魔族密碼

bar 測試 iostream div 大學 clu str string length

描述

風之子剛走進他的考場,就……
花花:當當當當~~偶是魅力女皇——花花!!^^(華麗出場,禮炮,鮮花)
風之子:我嘔……(殺死人的眼神)快說題目!否則……-_-###
花花:……咦~~好冷~~我們現在要解決的是魔族的密碼問題(自我陶醉:搞不好魔族裏面還會有人用密碼給我和菜蟲寫情書咧,哦活活,當然是給我的比較多拉*^_^*)。魔族現在使用一種新型的密碼系統。每一個密碼都是一個給定的僅包含小寫字母的英文單詞表,每個單詞至少包含1個字母,至多75個字母。如果在一個由一個詞或多個詞組成的表中,除了最後一個以外,每個單詞都被其後的一個單詞所包含,即前一個單詞是後一個單詞的前綴,則稱詞表為一個詞鏈。例如下面單詞組成了一個詞鏈:


i
int
integer
但下面的單詞不組成詞鏈:
integer
intern
現在你要做的就是在一個給定的單詞表中取出一些詞,組成最長的詞鏈,就是包含單詞數最多的詞鏈。將它的單詞數統計出來,就得到密碼了。

風之子:密碼就是最長詞鏈所包括的單詞數阿……
花花:活活活,還有,這些文件的格式是,第一行為單詞表中的單詞數N(1<=N<=2000),下面每一行有一個單詞,按字典順序排列,中間也沒有重復的單詞咧!!你要提交的文件中只要在第一行輸出密碼就行啦^^看你長得還不錯,給你一個樣例吧:

樣例1

樣例輸入1

5
i
int
integer
intern
internet
Copy

樣例輸出1

4
Copy

限制

各個測試點1s

來源

Vivian Snow
From 正·蠢盟演義——戰略版 Fools-League Tactics

上了大學反而越來越怠惰了,日漸肥宅化

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 
 7 int n,f[2020
],ans; 8 string ch[2020]; 9 10 bool cmp(string a,string b) 11 { 12 return a.length()<b.length(); 13 } 14 15 int main() 16 { 17 cin>>n; 18 for(int i=1;i<=n;i++) 19 { 20 cin>>ch[i]; 21 f[i]=1; 22 } 23 sort(ch+1,ch+n+1,cmp); 24 for(int i=1;i<n;i++) 25 for(int j=i+1;j<=n;j++) 26 if(ch[j].find(ch[i])==0) f[j]=max(f[i]+1,f[j]); 27 for(int i=1;i<=n;i++) 28 ans=max(ans,f[i]); 29 printf("%d",ans); 30 return 0; 31 }

[vijos p1028] 魔族密碼