题目地址:https://www.luogu.org/problem/show?pid=1481
这题于矩形嵌套问题类似,如果某个单词时是令一个单词的前缀,那么就是说a到b有一条有向边,那么就转化成为了DAG上的动态规划。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN=2000+5;
char s[MAXN][76];
int n,ans,f[MAXN];
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%s",s[i]);
}
f[1]=1;
for(i=2;i<=n;i++)
{
int maxx=0;
for(j=i-1;j>=1;j--)
{
int l=strlen(s[j]);
if(maxx<f[j]&&!strncmp(s[i],s[j],l))
maxx=f[j];
}
f[i]=maxx+1;
}
for(i=1;i<=n;i++)
ans=max(ans,f[i]);
printf("%d\n",ans);
return 0;
}