vijos 1028 LIS *

链接:点我

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 const int INF=0x3f3f3f3f;
11 const double eps=1e-5;
12 typedef long long ll;
13 #define cl(a) memset(a,0,sizeof(a))
14 #define ts printf("*****\n");
15 const int MAXN=2500;
16 int n,m,tt;
17 int dp[MAXN];
18 char s[MAXN][MAXN];
19 bool fun(int x,int y)
20 {
21     int len1=strlen(s[x]);
22     int len2=strlen(s[y]);
23     if(len1<len2)   return 0;
24     for(int i=0;i<len2;i++)
25     {
26         if(s[x][i]!=s[y][i])
27         {
28             return 0;
29         }
30     }
31     return 1;
32 }
33 int main()
34 {
35     int i,j,k;
36     scanf("%d",&n);
37     for(i=1;i<=n;i++)    scanf("%s",&s[i]);
38     int ans=0;
39     for(i=1;i<=n;i++)
40     {
41         int m=1;
42         for(j=1;j<i;j++)
43         {
44             if(fun(i,j))
45             {
46                 m=max(m,dp[j]+1);
47             }
48         }
49         dp[i]=m;
50         ans=max(dp[i],ans);
51     }
52     printf("%d\n",ans);
53 }

 

posted @ 2015-07-11 10:41  miao_a_miao  阅读(172)  评论(0编辑  收藏  举报