单调递增最长子序列
如:dabdbf最长递增子序列就是abdf,长度为4
- 输入
- 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 - 输出
- 输出字符串的最长递增子序列的长度
- 样例输入
-
3 aaa ababc abklmncdefg
- 样例输出
-
1 3 7
思路:当成最大递增子序列就可以了。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char a[10004]; char b[10005]; int main() { int T; scanf("%d",&T); getchar(); while(T--) { gets(a); b[0] = a[0]; int index = 0; for(int i=1;i<strlen(a);i++) { if(b[index]<a[i]) { index++; b[index] = a[i]; }else{ int pos = lower_bound(b,b+index,a[i])-b; if(b[pos]>a[i]) b[pos] = a[i]; } } printf("%d\n",index+1); } return 0; }