NYOj-17-单调递增最长子序列

单调递增最长子序列
时间限制:3000 ms | 内存限制:65535 KB
难度:4
描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0 随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7

动态规划的思想,跟poj上一道题差不多
http://blog.csdn.net/qq_32680617/article/details/50807824
注意上升序列是可以不连续的

找出子问题:求以a(n) (n=1,2,,,,n)为终点的最长上升子序列。
那么状态转移方程就是:(特殊符号不会打。。。)

代码

#include
#include
#include
#include
#include
#include
#include
using namespace std;
//动态规划
char str[10005];//存储字符串
int num[10005];//存储前i位字符串中最长递增子序列的长度
int main()
{
    int N;//N组数据
    scanf("%d",&N);
    while(N--)
    {
        memset(str,'\0',sizeof(str));
        memset(num,0,sizeof(num));
        scanf("%s",str);
        int max_len=0;//记录最大长度
        int len=strlen(str);
        num[0]=1;
        for(int i=1; iint flag=0;
            for(int j=0; jif(str[i]>str[j]&&flag1;
        }
        for(int i=0; iprintf("%d\n",max_len);
    }
    return 0;
}

你可能感兴趣的:(动态规划)