对于1D/1D动态规划来说,理论时间复杂度都是O(n^2)的,这种动态规划一般都可以进行优化,贴一篇文章

https://wenku.baidu.com/view/e317b1020740be1e650e9a12.html

这里介绍最简单的一种,LIS的求法

其实就是二分,找单调性来二分

HDU1950是一道裸题

 1 #include <iostream>
 2 #include<cstring>
 3 #include <algorithm>
 4 #define INF 0x3f3f3f3f
 5 using namespace std;
 6 const int N = 1e5 + 5;
 7 int s[N];
 8 int n,p,a[N];
 9 int len;
10 int main()
11 {
12     cin>>n;
13     while(n--){
14         cin>>p;
15         memset(s,0,sizeof(s));
16         for(int i = 0;i<p;i++)cin>>a[i];
17         s[1] = a[0];len = 1;//长度从1开始
18         for(int i = 1;i<p;i++){
19
20             int t = a[i];
21             if(t>s[len])s[++len] = a[i];
22             else{
23         /*************/int l = 1,r = len,mid;//这里的二分法采用了左闭右闭的思路
24                <span style="white-space:pre">            </span>int ans = 0;
25                 while(l<=r)
26                 {
27                     mid = (l+r)/2;
28                     if(s[mid]<t)
29                         {l = mid +1;ans = max(ans,mid);}//ans即为思路中的j,j必然为s数组中小于t的最大的数
30                     else r = mid-1;
31                 }
32                 s[ans+1] = t;/******************/
33             }
34         }
35         //for(int i = 1;i<p;i++){cout<<s[i];}//有必要可以打开看看s中存的是什么值
36         cout<<len<<endl;
37     }
38     return 0;
39 }

然后

1 int p = lower_bound(s+1,s+len+1,t)-s;
2 s[p] = t;

如果觉得不对可以找到合唱队形那个题的程序对拍一下子

转载于:https://www.cnblogs.com/aininot260/p/9627043.html

动态规划:LIS优化相关推荐

  1. 《中国人工智能学会通讯》——11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用...

    11.34 基于近似动态规划的优化控制研究及 在电力系统中的应用 上世纪 50 年代以来,在空间技术发展和数字计算机实用化的推动下,动态系统的优化理论得到了迅速的发展,形成了一个重要的学科分支--最优 ...

  2. 动态规划背包问题优化空间复杂度——滚动数组

    动态规划背包问题优化空间复杂度--滚动数组 背包问题 空间复杂度优化 Java代码 链接:代码随想录背包问题 背包问题   背包问题是动态规划中基本的问题,我们考虑下面的简单问题:   假设背包容量为 ...

  3. 03 线型动态规划——LIS模型

    LIS模型--最长上升子序列(Longest Increasing Subsequence) [例1]最长上升子序列 Description 一个数的序列bi,当b1< b2 < ... ...

  4. [剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]

    [问题描述][中等] 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率.你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集 ...

  5. BZOJ1010 [HNOI2008]玩具装箱toy 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8687797.html 题目传送门 - BZOJ1010 题意 一个数列$C$,然后把这个数列划分成若干段. 对于 ...

  6. 动态规划(斜率优化):BZOJ 3675 [Apio2014]序列分割

    Description 小H最近迷上了一个分割序列的游戏.在这个游戏里,小H需要将一个长度为N的非负整数序列分割成k+l个非空的子序列.为了得到k+l个子序列, 小H将重复进行七次以下的步骤: 1.小 ...

  7. LIS优化 —— 队列优化 + 二分

    mbp送去维修的第5天. Description 给定一长度为n的数列,请在不改变原数列顺序的前提下,从中随机的取出一定数量的整数,并使这些整数构成单调上升序列. 输出这类单调上升序列的最大长度.数据 ...

  8. P1091 [NOIP2004 提高组] 合唱队形(动态规划+LIS)

    P1091 [NOIP2004 提高组] 合唱队形 Part1:链接: 点我就送屠龙宝刀[doge] Part2:题目 Part3:思路 隔了这么久,屑人再次捡起了他的节操,洗了洗,然后开始续写他的苦 ...

  9. 简单瞎搞题 动态规划的优化

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 一共有 n个数,第 i 个数是 xi xi 可以取 [li , ri] 中任意的一个值. 设 S=∑xi2S = \sum{{x_ ...

最新文章

  1. [译] 在 Facebook 发一张登机牌,你就有可能被盗号了
  2. 装配bean的三种方式
  3. Android 第三课 构建简单的用户界面
  4. boost::describe模块实现pp_call的测试程序
  5. svn命令行工具安装使用(windows)
  6. [李景山php]每天TP5-20170111|thinkphp5-Model.php-4
  7. toolbar java_Java ToolBar.layout方法代码示例
  8. python123第一周测试作业指导书_风速仪作业指导书.doc
  9. html图片圆点切换,JQuery和html+css实现带小圆点和左右按钮的轮播图实例
  10. Java并行编程–从并行任务集获取反馈
  11. input checkbox 选中问题
  12. 二阶常系数微分方程求解步骤
  13. python中 f代表什么_python 中下拉框中的f,v,m是什么意思??
  14. 十八. 项目采购管理
  15. PSINS_Toolbox使用心得1
  16. 浅入浅出Caffeine cache
  17. 嵌入式Linux中间件,高可用性(HA)和嵌入式管理中间件:Enea Element详解
  18. 多线激光雷达+imu的gazebo仿真
  19. c语言输出字母A的ascii值,ascii是什么意思_C语言中如何输出ASCII码
  20. react中英文切换一

热门文章

  1. 深度学习pytorch--多层感知机(一)
  2. 360安全浏览器兼容模式怎么设置_测试新手一定要知道:最实用的Web兼容性测试经验都在这...
  3. 怎么修改ipv4服务器,如何修改ipv4 wins 服务器地址
  4. java中给组合框加监听器,如何区分ActionEvent中的多个组合框
  5. 计算机学校教学大纲,中等职业学校计算机应用基础教学大纲
  6. python里写在文件的指定行_python文件操作如何写在指定的行
  7. python服务器搭建 实战_实战讲解:如何用Python搭建一个服务器
  8. python语言变量随时声明_2. Go语言五种变量创建的方法
  9. 敲代码时如何快速移动光标_如何用 Linux 技巧大大提高工作效率?
  10. pat乙级 1007 素数对猜想(C++)