zoukankan      html  css  js  c++  java
  • 单调递增最长子序列

    单调递增最长子序列

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

    iphxer


    dp[i]表示前i个字符串时候最长递增子序列长度。则取局部最优,动态规划

    #include <cstdio>
    #include <algorithm>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include <string>
    using namespace std;
    
    #define mem(a) memset(a, 0, sizeof(a))
    
    char a[10100];
    int dp[10100];
    
    int main() {
    	int n;
    	cin >> n;
    	while (n --) {
    		mem(a);	mem(dp);
    		cin >> a;
    		int ans = 1, p = strlen(a);
    		//for (int i = 0; i<p; i++)	dp[i] = 1;
    		dp[0] = 1;
    		for (int i = 1; i<p; i++) {
    			int Max = 0;
    			for (int j = i-1; j>=0; j--) {
    				if (a[i] > a[j] && Max < dp[j])	Max = dp[j];
    			}
    			dp[i] = Max + 1;
    			if (dp[i] > ans)	ans = dp[i];
    		}
    		cout << ans << endl;
    	}
    	return 0;
    }


  • 相关阅读:
    TCP/IP 网路基础
    三、Django之请求与响应-Part 1
    二、Django快速安装
    Linux 优化详解
    缓存的正确使用方式
    HTML从入门到放弃
    Ansible开发之路
    程序猿数据库学习指南
    MySQL错误代码大全
    Python之网络编程
  • 原文地址:https://www.cnblogs.com/Tovi/p/6194795.html
Copyright © 2011-2022 走看看