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 }