序列dp
Anxdada
多读书多看报, 少吃零食多睡觉
展开
-
快速好写的求最长回文子串的代码(O(n^2))
有好写, 又好想, 是切水题的不二之选. 注意一下k的初值的变化, 因为找偶数的字符串与奇数的刚好差了一个.#include<cstdio>#include<cstring>char s[1005];int main(){ scanf("%s",s); int len = strlen(s); int res = -1; for(int i=0;i<len;原创 2017-07-13 22:55:55 · 357 阅读 · 0 评论 -
2017年南宁网络赛 L 题 【最长非递减序列 + 思维】
传送门 //题意: 就是给你一串数字, 如果它是负数那么它的权重为0, 如果它>=1e4, 那么它的权重为5, 且在序列中真正的数是该数 - 1e4. 其他的数权重为1. 问选一个权重最大的LIS. //思路: 我们首先考虑nlogn的LIS的做法, 其中的g数组保存的是以该个数结尾的最长的LIS是多少, 并且越小的越好. 那么是不是跟这个很像了. 所以直接权重为5的连续插入5次, 然后求一个原创 2017-09-24 20:48:32 · 431 阅读 · 0 评论 -
HDU --- 5904 LCIS 【思维 + 简单dp】
传送门 //题意: 给出两个序列, 分别为n,m. 求这两个序列最长公共子序列, 并且要满足选出来的这个序列是严格递增且相邻数字之间恰好差1. //思路: 突破点肯定是在要求递增且相邻位置差1上. 所以dp状态转移方程很简单: dp[num] = dp[num-1] + 1 ; 所以我们对第一个序列进行dp处理, 处理出每一个数作为满足条件的最长值是多少. 处理完后, 直接对第二个序列进行边扫原创 2017-09-08 15:26:16 · 322 阅读 · 0 评论 -
一些常见的子列问题【思维】
问题模型: 给定一连串的数(或子串),问一些关于子列(和,差,公共子串,公共子序列等)的一些问题. (数字的个数在1e5之内,每个数的范围-1000~1000)和一些常见的思想与处理.1 : 给定一串数字,求最大连续子序和. (很明显的区间和就用前缀呀, 维护一个最小前缀和即可) 这里给出的是贪心的做法。const int inf=1e9;int main() { ...原创 2017-06-21 13:41:14 · 750 阅读 · 0 评论 -
Dilworth定理 的相关应用
讲的好的博客证明总结一下:给定一个序列, (假定有重复数字, 没有重复的类似推导) 1:如果求每次在其中选出一个不下降子序列并将其删掉, 求删完整个序列所需要的选择子序列的次数 (相当于求一个不下降子序列最小划分size) 例: 1 2 4 3 5 就要删2次, 第一次1 2 3 5. 根据定理转换: 实际上就是求这原序列的最长下降子序列2:如果求每次在其中选出一个下降子序列并将其删掉, 求删原创 2018-03-29 22:22:06 · 767 阅读 · 0 评论 -
ZOJ 1025 Wooden Sticks 【思维 + 最长下降子序列 + Dilworth定理】
传送门 // 题意: 有n个木头, 每个木头有一个长度和重量. 每次一根木头准备需要1分钟, 如果下一根木头的(l’, w’) l’ >= l, w’ >= w, 那么就不用多余准备时间, 否则准备时间加1, 问处理掉这些木头最少需要多少分钟.思路: 有一个很明显的二维偏序关系在里面, 那么假设我们只看一维, 那么就是问最少可以划分多少组最长不下降子序列, 那么由这个Dilworth定理我们可以转原创 2018-03-30 12:10:10 · 300 阅读 · 0 评论 -
UVA - 10534 Wavio Sequence 【最长上升子序列变形】 好题
传送门 题意: 给定一个n个数的序列, 问其中最长的波浪序列有多长, 波浪序列的定义为 : 首先长度是奇数, 即2*n + 1, 并且前面(n + 1) 个元素严格单增 , 后面(n + 1) 个元素严格单减. 思路: 很明显我们并不能一次就可以得出答案, 但是我们可以枚举以每个数作为浪尖时的答案, 然后取max就好了, 所以我们首先要预处理出以每个元素为结尾的前面的最长上升子序列, 后该位置后原创 2018-05-04 16:55:25 · 479 阅读 · 0 评论