DP的学习计划,刷 https://codeforces.com/problemset?order=BY_RATING_ASC&tags=dp

遇到了这道题 https://codeforces.com/problemset/problem/702/A

以为是最长上升子序列(Longest Increasomg Subsequence)的模板题,发现自己不会做

记录一下大概的思路:

\(O(n^2)\) 的算法:

  • \(L[i]\) 选择 \(A[i]\) 为结尾的LIS的长度
  • \(P[i]\) 选择 \(A[i]\) 为结尾的LIS的倒数第二个元素的Position(可以用来复现整个LIS)
  • 临时变量 \(k\) ,表示 \(A[i]\) 计算时找到的前面最长的LIS的位置
  • 对于每个 \(A[i]\) ,遍历它前面的每个 \(A[j]\) ,记录所有满足 \(A[j]<A[i]\) (可以把 \(A[i]\) 接在后面)且 \(L[j]>L[k]\) (更长的子序列)
  • \(L[i]=L[k]+1\)
  • \(P[i]=k\)

\(O(nlogn)\) 的算法:

  • \(L[i]\) 长度为\(i+1\) 的IS的末位元素的最小值
  • \(length\) 前 \(i\) 个元素构成的LIS的长度
  • 升序遍历 \(i\),故 \(length\) 非降,而且构造的过程中 \(L\) 数组是递增的
  • 如果 \(L[length-1]<A[i]\) ( \(A[i]\) 可以接在当前最长的(长度为 \(length\) 的)LIS后面),则 \(L[length++]=A[i]\)
  • 否则在已确定的 \(L[0]~L[length]\) 中(长度为 \(1\) 到 \(length\) 闭区间的LIS的最末元素)二分找到能更新的位置并更新 $*lower\_bound(L,L+length,A[i])=A[i]$
#include<bits/stdc++.h>
using namespace std;
#define ll long long int A[];
int L[]; int lis(){
L[]=A[];
int length=;
for(int i=;i<n;i++){
if(L[length-]<A[i]){
L[length++]=A[i];
}
else{
*lower_bound(L,L+length,A[i])=A[i];
//1 7 2 5,已有序列1 7,lower_bound(2)得到7,可以把长度为2的LIS的末尾换成2
}
}
return length;
} int main(){
int n;
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&A[i]);
}
printf("%d\n",lis()); }

复原的时候也很简单,把$L[0]~L[length-1]$全部输出就可以了

但是最后我发现这个702A并不是LIS,因为他不是子序列而是子串!

2019-01-16

Codeforces - 702A - Maximum Increase - 简单dp的更多相关文章

  1. CodeForces 702A Maximum Increase

    简单$dp$. 如果$a[i]>a[i-1]$,那么$dp[i]=dp[i-1]+1$.否则,$dp[i]=1$.答案为$dp[i]$中的最大值. #pragma comment(linker, ...

  2. Codeforces 702A Maximum Increase(dp)

    题目链接:http://codeforces.com/problemset/problem/702/A 题意: 给你N个数,a[0], a[1], a[2], ....., a[n-1],让你找出最长 ...

  3. Codeforces 1108D - Diverse Garland - [简单DP]

    题目链接:http://codeforces.com/problemset/problem/1108/D time limit per test 1 secondmemory limit per te ...

  4. Codeforces - 1081C - Colorful Bricks - 简单dp - 组合数学

    https://codeforces.com/problemset/problem/1081/C 这道题是不会的,我只会考虑 $k=0$ 和 $k=1$ 的情况. $k=0$ 就是全部同色, $k=1 ...

  5. Codeforces - 474D - Flowers - 构造 - 简单dp

    https://codeforces.com/problemset/problem/474/D 这道题挺好的,思路是这样. 我们要找一个01串,其中0的段要被划分为若干个连续k的0. 我们设想一个长度 ...

  6. Codeforces - 909C - Python Indentation - 简单dp

    http://codeforces.com/problemset/problem/909/C 好像以前做过,但是当时没做出来,看了题解也不太懂. 一开始以为只有上面的for有了循环体,这里的state ...

  7. Codeforces 375B Maximum Submatrix 2 (DP)

    <题目链接> 题目大意:给出一个01矩阵,行与行之间可以互换位置,问能够得到最大的全1矩阵的面积. #include <bits/stdc++.h> using namespa ...

  8. Codeforces 886E Maximum Element 组合数学 + dp

    我们定义dp[ i ]表示长度为 i 的序列, 最后没有一个==k的时候返回的方案数, 也就是最后强制返回 i 的方案数. 我们能得到dp方程   dp[ i ] = sum(dp[ i - j - ...

  9. Codeforces 332B Maximum Absurdity(DP+前缀和处理)

    题目链接:http://codeforces.com/problemset/problem/332/B 题目大意:给你n个数和一个整数k,要求找到不相交的两个长度为k的区间,使得区间和最大,输出这两个 ...

随机推荐

  1. vim中末行去掉^M

    在Ubuntu系统中打开文件,发现文件中每一个末行都有^M,我们要做的是知道这一个无关的字符是什么作用,然后删除掉这一个无关的字符. 工具/原料   ubuntu操作系统 Vim编辑器 方法/步骤   ...

  2. JBoss 6.1安装配置问题

    一,配置环境变量 JBOSS_HOME:配置到解压文件的根文件夹下: classpath跟JAVA_HOME:配置的解压文件夹\bin文件夹以下: 二,訪问端口号 因为我之前安装过Tomcat,所以占 ...

  3. 消息列队 php 基于redis 实现

    说明 消息列队 基于PHP 实现. 之前 用python 的 flower 实现了 列队. 今天这里我们用的是 PHP 来实现: 在实际的业务环境中 PHP 用的多些: PHP 实现列队 最重要的是用 ...

  4. 从实例看hibernate的主键生成策略

    学习了hibernate会发现.hibernate中有实体类.实体类的映射文件.可是我们怎么样才干知道实体类的主键是如何的生成方式呢?hibernate提供的主键生成策略帮我们完美地解答了这个疑问.以 ...

  5. SQL获取事件探查器保存的跟踪文件

    fn_trace_gettable (Transact-SQL) 以表格格式返回一或多个跟踪文件的内容. Transact-SQL 语法约定 语法 fn_trace_gettable ( filena ...

  6. Android逆向利器和smali代码修改出错举例-入参类型

    当smali修改代码出错举例1,log如下: 虚拟机层次: 1.本身做出了预测,寄存器v2是符合要求入参,暗示你这个也许是你想要的.VFY: register1 v2 type 17, wanted ...

  7. 基于TCP应用协议/端口

  8. 淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划

    淘宝数据库OceanBase SQL编译器部分 源码阅读--生成物理查询计划 SQL编译解析三部曲分为:构建语法树,制定逻辑计划,生成物理执行计划.前两个步骤请参见我的博客<<淘宝数据库O ...

  9. Arcgis Engine(ae)接口详解(6):workspace操作

    //此处用的workspace来源与用户选择 IWorkspace workspace = null; //workspace一般等同于数据库 //工作空间类型,也可理解为数据库类型 //esriFi ...

  10. 嵌入式开发之davinci--- 8148/8168/8127 中的添加算饭scd 场景检测 代码实现

    http://blog.csdn.net/mianhuantang848989/article/details/38035731 http://www.61ic.com/Article/DaVinci ...