描述

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

输入
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
输出字符串的最长递增子序列的长度
样例输入
3
aaa
ababc
abklmncdefg
样例输出
1
3
7

有两种方式可以求解,

解法一:

首先对字符串S1进行从小到大排序,然后删除有序数组相同的字符得到S2。再求S1与S2的最长子串即可(求子串的方法见两个字符串的最长相同子序列)。

排序方法:

 1  public static char[] sort(char[] P,ref int m)
 2         {
 3
 4             for (int j = 0; j < P.Length - 1; j++)
 5             {
 6                 for (int i = 0; i < P.Length - 1 - j; i++)
 7                 {
 8                     if (P[i] > P[i + 1])
 9                     {
10                         char point1 = P[i];
11                         P[i] = P[i + 1];
12                         P[i + 1] = point1;
13                     }
14                 }
15             }
16             char x = P[1];
17             int k = 2;
18             for (int i = 2; i < P.Length; i++)
19             {
20                 if (P[i] != x)
21                 {
22                     P[k] = P[i];
23                     x = P[i];
24                     k++;
25                 }
26             }
27             m = k;
28             return P;
29         }

View Code

解法二:

利用动态规划的思想,求S1[0...i]的最长递增子串,只需要比较S1[0...i-1]中S1[k]与S1[i]的大小。

f(i)=max(f(i-1),f(i-2),...,f(0))+1;用一个int dp[i]数组保存当前的f(i)值,即到第i个元素的最长递增子序列。

递推方程的意思是,在求以ai为末元素的最长递增子序列时,找到所有序号在i前面且小于ai的元素aj,即j<i且aj<ai。如果这样的元素存在,那么对所有aj,都有一个以aj为末元素的最长递增子序列的长度f(j),把其中最大的f(j)选出来,那么f(i)就等于最大的f(j)加上1,即以ai为末元素的最长递增子序列,等于以使f(j)最大的那个aj为末元素的递增子序列最末再加上ai;如果这样的元素不存在,那么ai自身构成一个长度为1的以ai为末元素的递增子序列。

 1 public static int LongestAddSubsequence(string A)
 2         {
 3             int longest = 1;
 4             int[] dp = new int[A.Length];
 5             for (int i = 0; i < A.Length; i++)
 6                 dp[i] = 1;//初始话均为1
 7             for (int i = 1; i < A.Length; i++)
 8                 for (int j = i - 1; j >= 0; j--)
 9                     if (A[i] > A[j] && dp[i] < dp[j] + 1)//遇到比当前值小,并且长度比当前长度大的就更新当前长度
10                         dp[i] = dp[j] + 1;
11             for (int i = 0; i < A.Length; i++)
12                 if (dp[i] > longest)
13                     longest = dp[i];
14                 return longest;
15         }

View Code

转载于:https://www.cnblogs.com/xiaoyi115/p/3175549.html

单调递增最长子序列(南阳理工ACM)相关推荐

  1. 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹

    一,    最长递增子序列问题的描述 设L=<a1,a2,-,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,-,akm>,其中k1< ...

  2. 单调递增最长子序列 - 从最长公共子序列到单调递增最长子序列

    最长公共子序列 的 算法思路 在这里 点击进入  将 代码稍微改动一下 就可以   ,   最长公共子序列  是两个 字符串求 公共子序列  , 可以将其中的 一个 改为 从 a 到 z  这样输入另 ...

  3. 动态规划之-----单调递增最长子序列(nyoj17)

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行 ...

  4. 单调递增最长子序列 拦截导弹(nyoj 17 nyoj 79)

    思路参考:点击打开链接 单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf ...

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

    7-1 单调递增最长子序列 (20分) 设计一个 O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列. 输入格式: 输入有两行: 第一行:n,代表要输入的数列的个数 第二行:n个数,数字 ...

  6. nyoj-17 单调递增最长子序列(灵活应对)

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行 ...

  7. 24-单调递增最长子序列(多种解法总结)

    单调递增最长子序列 http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=17 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 ...

  8. NYOJ-单调递增最长子序列(dp)

    单调递增最长子序列 描述: 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入: 第一行一个整数0<n<20,表示有n个字符串要处理 随后的n行 ...

  9. 南阳理工ACM 题4《ASCII码排序》

    4-ASCII码排序 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:76 submit:115 题目描述: 输入三个字符(可以重复)后,按各字符的A ...

最新文章

  1. 关于PHP.ini文件的设定
  2. cntos7 安装Anaconda3 和Jupyter notebook
  3. Win 系统 PyTorch 安装配置教程
  4. JSP由浅入深(3)—— 通过表达式增加动态内容
  5. c语言坐标输出图片,tc 如何在指定坐标处 输出bmp图片??
  6. json tostringfiy_JS学习笔记 : 类型转换之「抽象值操作」
  7. MySQL 删除用户权限
  8. 今日头条新出算法大赛!短视频内容理解与推荐竞赛
  9. Kafka生成消息时的3种分区策略
  10. servlet destroy 示例_Servlet中的Listener的应用
  11. 从零开始学前端:列表标签 --- 今天你学习了吗?(CSS:Day06)
  12. ArcGIS API for Silverlight 调用GP服务绘制等值面
  13. CISCO发现协议(CDP)理论与实验
  14. 地脚螺钉直径系列_干数控这么久,现在才分清楚螺栓、螺钉、螺柱的区别
  15. 黑科技VNET——最好用的Android抓包神器
  16. 工作流-Activiti7-基础讲解
  17. ie8 css hack 只适用ie8的css写法
  18. 疑难杂症篇(十六)--虚拟机出现“The system is running in low-graphics mode“问题的解决方案
  19. C++ pair的常见用法(详细)
  20. Python中int32转int64

热门文章

  1. 小学五年级计算机进度安排,五年级下册信息技术年度教学计划
  2. mysql8.0.19.0安装_一、MySQL8.0.19 安装教程
  3. 计算机多媒体理论知识,计算机多媒体技术07311.doc
  4. linux运维脚本编写,Linux运维常用shell脚本实例 (转)
  5. c语言习题与实验doc,[教材]C语言程序设计习题与上机实验(全部答案).doc
  6. 全字库说文解字字体_整理了10款免费商用中文字体,超好用
  7. android 6.0虚拟内存,Maxwell的统一虚拟内存只用在专业卡上,GTX 750 Ti或无缘
  8. 罗辑思维 - 当代的学习方法
  9. RRDTool 存储原理简介——基于时间序列的环型数据库
  10. 十大经典算法排序总结对比