
区间DP
CCSUZB
吾生也有涯,而知也无涯
展开
-
HDU 1003-最大子段和
题目链接设a[1-n]为输入的数组,DP[i]表示以i位置结尾最大的字段和,当DP[i-1]大于等于0时表示DP[i-1]对a[i]有贡献则DP[i]=DP[i-1]+a[i]否则DP[i]=a[i],这里代码中省略了a数组。#include <iostream> #include <cstring>#include <cstdio>#include <algorithm>#include原创 2017-08-19 20:37:44 · 378 阅读 · 0 评论 -
POJ 3280-区间DP
题目链接DP[i][j] 表示区间i到j变成回文串的代价当DP[i+1][j]区间i+1到j是回文串时第i个字符可以添加也可以删除选取最小的代价,DP[i][j-1]也是一样#include <iostream> #include <cstring>#include <cstdio>#include <algorithm>#include <string>#include <stri原创 2017-08-15 15:43:20 · 216 阅读 · 0 评论 -
POJ 1065-Dilworth定理
题目链接Dilworth定理:对于一个偏序集,最少链划分等于最长反链长度。Dilworth定理的对偶定理:对于一个偏序集,其最少反链划分数等于其最长链的长度。也就是说把一个数列划分成最少的最长不升子序列的数目就等于这个数列的最长上升子序列的长度。(记住就好 hhhh~一篇解释博客)所以就变成将l排序如果l相等就按w排序,最终求w最长下降子序列长度了#include <iostream>#inclu原创 2017-08-22 19:55:34 · 338 阅读 · 0 评论 -
POJ 2593-最大2个子序列和
题目链接题意:给你一段正整数序列求最大两个子序列和且不相交思路:正着从左到右记录1到i范围内的最大子序列和,然后逆着记录n到i的最大子序列和最后把左右两部分相加寻找最大值#include <iostream>#include <algorithm>using namespace std;const int maxn=100100;const int INF=-1e7;int dp[maxn]原创 2017-08-27 19:57:20 · 597 阅读 · 0 评论 -
HDU 1506-单调栈-DP
题目链接思路,dpl[i]表示从i下标开始往左边扫描,每一个高度都小于等于arr[i] (arr[i]是高度)最左边的下标值,dpr[i]表示从下标i往右开始扫描,每一个高度都小于等于arr[i] (arr[i]是高度)最右边的下标值,最后枚举一遍结果寻找最大值#include <iostream>#include <cstdio>#include <algorithm>using names原创 2017-08-28 21:11:20 · 311 阅读 · 0 评论