【动态规划】单调递增最长子序列
时间限制: 1 Sec 内存限制: 128 MB题目描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7
递增子序列可以不是连续的。。。
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <stdio.h> 5 6 using namespace std; 7 8 char a[11111],sum[11111]; 9 int n,ans; 10 11 int main() 12 { 13 while(cin>>n) 14 { 15 while(n--) 16 { 17 cin>>a; 18 ans=1; 19 memset(sum,1,sizeof(sum)); 20 for(int i=1;i<strlen(a);i++) 21 { 22 int tag=0; 23 for(int j=0;j<i;j++) 24 { 25 if(a[j]<a[i]&&tag<sum[j]) 26 { 27 tag=sum[j]; 28 } 29 } 30 sum[i]+=tag; 31 if(ans<sum[i]) 32 ans=sum[i]; 33 } 34 cout<<ans<<endl; 35 } 36 } 37 return 0; 38 }