最长单调递增子序列  应该算是比较经典的问题  记录一下我写这道题的过程吧

首先转换成lcs的做法 我就不说了 我觉得很内个啥 你懂吧 就复杂度依然是n方  很麻烦的方法

方法一 动态规划  O(n*n)

思路是这样的  定义dp[i] 为在I点结束的最长单调递增子序列的长度   所以可以便利一遍数组 每次都把之前的东西都找一遍 尝试增大  就这样

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 10005;
int main()
{int dp[N], t, maxx;char str[N];cin >> t ;while ( t -- ) {maxx = 0;cin >> str ;int len = strlen(str);memset(dp , 0, sizeof(dp));for (int i = 0; i < len; i ++) {for (int j = 0; j < i ; j ++) {if(str[j] < str[i])dp[i] = max(dp[i] , dp[j] + 1);maxx = max(maxx , dp[i]);}}cout << maxx + 1 << endl;}return 0;

百度了下O(n*lgn)的算法思想   然后自己写了一发

参考了这个人的博客 非常详细 不会都难!!!

这个人的~~

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 10005;
char tar[N];
char str[N];
int Binary_search(int l,int r,char c)
{int mid;while (l < r) {mid = (l + r) >> 1;if(tar[mid] < c) {l = mid + 1;} else if (tar[mid] > c) {r = mid;} else return mid;}//cout << "mid == " << mid << endl;return l;
}
int main()
{int t ;cin >> t ;while ( t -- ) {cin >> str ;int length = strlen(str);int len = 0;tar[len ++] = str[0];for (int i = 1; i < length; i ++) {if(str[i] > tar[len - 1]) {tar[len ++] = str[i];}else {int pos = Binary_search(0 , len, str[i]);tar[pos] = str[i];}}cout << len << endl;}
}

NYOJ 17 (最长单调递增子序列) O (n*n) + O(n*lgn)相关推荐

  1. 最长单调递增子序列 [转]

    [转] http://skynewborn.blog.sohu.com/66594610.html 单调子序列包含有单调递增子序列和递减子序列,不失一般性,这里只讨论单调递增子序列.首先,从定义上明确 ...

  2. 最长单调递增子序列O(NlogN)算法

     O(NlgN)算法 假设存在一个序列d[1..9] ={ 2,1 ,5 ,3 ,6,4, 8 ,9, 7},可以看出来它的LIS长度为5.  下面一步一步试着找出它.  我们定义一个序列B,然后 ...

  3. 最长单调递增子序列 python_最长单调递增子序列

    前面三篇博客分别讲了贪心,递归,分治,今天就说个简单的动态规划(DP)的题目吧.在我心中DP算是比较难的算法,尤其像状态DP,树形DP,因为实力问题就说一个简单的线性DP--最长单调递增子序列. 题目 ...

  4. java最长单调递增子序列_最长单调递增子序列问题

    最长单调递增子序列问题 题目:设计一个 O( n ^ 2 )复杂度的算法,找出由 n 个数组成的序列的最长单调递增子序列. import java.util.Scanner; public class ...

  5. 输出最长单调递增子序列java_动态规划实现最长单调递增子序列

    1. 实验环境 操作系统:Mac 64 运行内存:16GB 编程语言:Java 编译环境:Eclipse 2. 题目要求 设计一个Ο(nlgn)时间的算法,求一个 n 个数的序列的最长单调递增子序列. ...

  6. 动态规划作业 最长单调递增子序列

    动态规划作业 1.最长单调递增子序列 设计一个 O(n2)时间的算法,找出由 n 个数组成的序列 a 的最长单调递增子序列. 提示: 用数组 b[0:n]纪录以 a[i] (0<= i< ...

  7. 最长单调递增子序列(时间复杂度O(nlogn))

    写在前面:仅为个人代码/总结,未必标准,仅供参考!如有错误,还望指出交流,共同进步! 最长单调递增子序列 [题目描述] 找出由n个数组成的序列中的最长单调递增子序列及其长度. [O(n*n)算法解题思 ...

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

    题目描述: 设计一个O(N^2)算法,找出n个数据组成的序列的最长单调递增子序列. 输入示例: 8 1 2 3 -9 3 9 0 11 输出示例: 5 1 2 3 9 11 设计思路: 有一个数组 a ...

  9. 最长单调递增子序列--动态规划

    最长单调递增子序列定义: 问题描述: 设计一个O(n2)时间的算法, 找出由n个数组成的序列的最长单调递增子序列. 输入 第1个整数n(0<n<100),表示后面有n个数据,全部为整数. ...

  10. 算法实验-最长单调递增子序列长度

    问题描述 解决思路 O(n^2) 首先考虑使用动态规划的方法解决该问题.首先将原问题分解为子问题.对于长度为n的序列(从下标1开始),假设前n-1个元素形成了n-1个以arr[i]结尾的单调递增最长子 ...

最新文章

  1. JQ+ajax 提交表单不跳转页面
  2. Datawhale编程——动态规划DP
  3. 资产配置决策系统的MATLAB实现
  4. 科大星云诗社动态20210814
  5. java微妙_10个微妙的Java编码最佳实践
  6. Namespace declaration statement has to be the very first statement in the script
  7. 在java中添加源_关于Java:如何在Android Studio中添加链接的源文件夹?
  8. MVC的WebApi中开启Session会话支持
  9. 使用SQL Server数据库指标预测应用程序问题
  10. Matlab信号提取、频谱分析、滤波、阈值设定、寻找极值点
  11. 网页加载速度优化方案
  12. mysql80110_M1938工作室出品N801苹果CMSV10高级自适应模板
  13. visual studio使用小技巧(以vs2012为例)
  14. [渝粤教育] 南京师范大学 会计学基础 参考 资料
  15. k3 审核流程图_K3Cloud 业务流程图Sql
  16. DHU数据结构-顺序表- ADT应用-找匹配
  17. 聊聊那些计量软件(区别、流行度 R Matlab SPSS SAS STATA)
  18. 计算机主板型号进bios,hp主板进入bios的方法(电脑进入BIOS的两种实用方法)
  19. AndroidStudio:The number of method references in a .dex file cannot exceed 64K错误
  20. 选择计算机配件用户需求,买电脑都需要看什么?对电脑不太懂,配置什么的…...

热门文章

  1. mysql查询各科成绩前三名_No.03 数据库经典面试之如何取出每科成绩的前三名
  2. 怎么把Word转成PDF?转换方法很简单
  3. Towards Fine-Grained Prosody Control for Voice Conversion 论文理解
  4. 【琐识】日常获取知识随笔
  5. linux mint 下如何制作win7启动盘
  6. html能计算吗,使用(JavaScript和HTML)计算总数
  7. linux ls 配色方案,Terminal 配色方案
  8. “学习金字塔理论”--了解,认知与实践
  9. Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'的解决办法
  10. 华为手机系统更新成鸿蒙,如何将自己的华为手机升级成鸿蒙系统