单调递增最长子序列

来源:互联网 发布:mac可以接鼠标吗 编辑:程序博客网 时间:2024/06/07 14:47

描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3aaaababcabklmncdefg
样例输出
137

思路:当成最大递增子序列就可以了。

代码如下:

#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;}