NYOJ 17-单调递增最长子序列(典型DP)

来源:互联网 发布:tcp 发送syslog java 编辑:程序博客网 时间:2024/06/11 00:43

单调递增最长子序列

时间限制:3000 ms  |  内存限制:65535 KB
难度:4
描述
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3aaaababcabklmncdefg
样例输出
137
//典型DP#include <stdio.h>#include <algorithm>#include <string.h>#define maxn 10005using namespace std;int dp[maxn];    //dp[i]表示以第i个字符作为结束,最长的序列长度char s[maxn];int main(){    int T;    scanf("%d", &T);    while(T--)    {        scanf("%s", s);        int l = strlen(s);        memset(dp, 0, sizeof(dp));        int cntmax = 1;        dp[0] = 1;        for(int i=1; i<l; i++)        {            dp[i] = 1;            for(int j=0; j<i; j++)            {                if(s[j]<s[i])                    dp[i] = max(dp[i], dp[j]+1);            }            cntmax = max(cntmax, dp[i]);        }        printf("%d\n", cntmax);    }    return 0;}

原创粉丝点击