单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7
讲解:类似于拦截导弹
1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int t,n,max,i,ans,j,count,opt[10010]; 6 char a[10010]; 7 scanf("%d",&t); 8 while(t--) 9 { 10 ans=0; 11 memset(opt,0,sizeof(opt)); 12 scanf("%s",a); 13 for(i=1;a[i]!='\0';i++) 14 { 15 for(j=0;j <= i-1;j++) 16 17 { 18 if(a[j]<a[i] && opt[j]+1>opt[i]) 19 20 { 21 opt[i]=opt[j]+1; 22 // printf("%d",opt[i]); 23 } 24 } 25 } 26 for(i=0;a[i]!='\0';i++) 27 if(opt[i]>ans) 28 29 ans=opt[i]; 30 printf("%d\n",ans+1); 31 } 32 return 0; 33 }