P1481 魔族密码 最长上升子序列 max型
题意:
i int integer 这种能组成词链,前面都是后面词的前缀,像integer intern就不是词链,现在要做的就是在一个给定的单词表中取出一些词,组成最长的词链,求最长词链的长度。
思路:
大佬的思路我惊为天人,可以把每一个刺符传看作一个属,其中如果a字符串包含b字符串,可以看作a比b大,然后就可以等价于做最长上升子序列了,最后再统计一遍答案;
代码:
注意要在输入的时候初始化f[i]=1,因为每个单词最小也是一个词链,即1;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(s[j].find(s[i])==0)f[j]=max(f[i]+1,f[j]);
}
}
int mmax=0;
for(int i=1;i<=n;i++)
{
mmax=max(mmax,f[i]);
}
cout<<mmax<<endl;