#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAX(x,y) ((x)>(y)?(x):(y))
using namespace std;
int dp[1100];
struct node
{
char s[100];
int len;
bool operator<(const node &a)const
{
return len<a.len;
}
}str[1100];
int ok(const node &a,const node &b)
{
if(a.len+1!=b.len)
return 0;
int len=0;
for(int i=0;i<b.len;i++)
{
if(b.s[i]==a.s[len])
len++;
}
if(len==a.len)
return 1;
else
return 0;
}
int main()
{
int n;
scanf("%d",&n);
scanf("%s",str[0].s);
str[0].len=strlen(str[0].s);
for(int i=1;i<=n;i++)
{
scanf("%s",str[i].s);
str[i].len=strlen(str[i].s);
}
memset(dp,0,sizeof(dp));
sort(str+1,str+1+n);
dp[0]=3;
for(int i=1;i<=n;i++)
for(int j=0;j<i;j++)
{
if(ok(str[j],str[i])&&dp[j])
{
dp[i]=MAX(dp[i],dp[j]+1);
}
}
int res=0,lo;
for(int i=0;i<=n;i++)
{
if(dp[i]>res)
{
res=dp[i];
lo=i;
}
}
printf("%s\n",str[lo].s);
return 0;
}
poj 2138 DP
最新推荐文章于 2019-06-09 05:32:40 发布