单调递增最长子序列(动态规划)

单调递增最长子序列

题目描述:

求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4

输入描述:

第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000

输出描述:

输出字符串的最长递增子序列的长度

样例输入:

3
aaa
ababc
abklmncdefg

样例输出:

1
3
7AC代码:
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 char s[10005];
 6 int dp[10005];
 7 int main()
 8 {
 9     int t;
10     scanf("%d",&t);
11     while(t--)
12     {
13         scanf("%s",s);
14         int len=strlen(s);
15         memset(dp,0,sizeof(dp));
16
17         for(int i=0;i<len;i++)
18         {
19             dp[1]=1;
20             for(int j=0;j<i;j++)
21             {
22                 if(s[i]>s[j])
23                 dp[i]=max(dp[i],dp[j]+1);
24             }
25         }
26         sort(dp,dp+len);
27         printf("%d\n",dp[len-1]);
28     }
29     return 0;
30 }
显示答案错误:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

char str[10005],a[10005];
int dp[10005];

int main(){
    int n;
    scanf("%d",&n);
    while( n-- ){
        scanf("%s",a);
        int len = strlen(a);
        for( int i = 0; i < len; i++ )
            str[i+1] = a[i];
        dp[1] = 1;
        for( int i = 2; i <= len; i++ ){
            dp[i] = 0;
            for( int j = 1; j <= len; j++ ){
                if( str[i] > str[j] )
                    dp[i] = max(dp[i],dp[j]+1);
            }
        }
        int ans = 0;
        for( int i = 1; i <= len; i++ )
            ans = max(ans,dp[i]);
        printf("%d\n",ans);
    }
    return 0;
}


原文地址:https://www.cnblogs.com/geziyu/p/10045816.html

时间: 2024-11-07 10:26:24

单调递增最长子序列(动态规划)的相关文章

nyist oj 17 单调递增最长子序列 (动态规划经典题)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 来源 经典题目 动态规划的经典题目:好像还有好几种解法,我现在研究的

NYOJ 17 单调递增最长子序列(动态规划)

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

【动态规划】单调递增最长子序列

问题 D: [动态规划]单调递增最长子序列 时间限制: 1 Sec  内存限制: 128 MB提交: 36  解决: 25[提交][状态][讨论版] 题目描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 解题思

求单调递增最长子序列长度

设计O(n*n)时间的算法,求n个数组成的序列的单调递增最长子序列长度 这道题在算法分析课本中属于课后习题,许多人做过,这道题是我真正体会到动态规划的思想的一道题,下面给出一个简单的思路! 记a[i]表示输入的序列,b[i-1]表示以a[i]结尾的序列的单调递增最长子序列,则原问题的解为b[n-1]: 原文地址:https://www.cnblogs.com/zhanbeizhu/p/9899977.html

nyoj 题目17 单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 复习了利用二分搜索和额外空间解决最长递增子序列问题,最重要的是二分搜索的

单调递增最长子序列(南阳oj17)(经典dp)

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 来源 经典题目 上传者 iphxer #include<std

NYOJ 17 单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 动归,不多说,看代码: #include<stdio.h>

nyoj17 单调递增最长子序列(DP)

题目17 题目信息 运行结果 本题排行 讨论区 单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 来源 经典题目 上传

NYOJ17,单调递增最长子序列

单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 来源 经典题目 也是到经典的DP题,另一种思路是,就a-z的一个字符