动态规划DP
文章平均质量分 74
Lanifer
这个作者很懒,什么都没留下…
展开
-
UVA 103 Stacking Boxes(最长增长子序列变形)
题目: 对于K维空间的盒子,你可以进行任意旋转, 如果某个盒子没一维长度都比另一个盒子对应长度短,则前者能够嵌套在后者里面,求一个最长的嵌套链。一看到这题就有似曾相识的感觉,仔细一想,这不就是个最长增长子序列问题吗。 两者明显有个对应关系,最长曾长子序列是满足后面的数大于前面的数,而这里是后面的盒子能套住前面的盒子。为了便于比较,我们可以将K为长度按递增排列, 盒子也按大小递增排列。。原创 2013-10-08 00:05:03 · 732 阅读 · 0 评论 -
HDU 3507 Print Article(斜率优化DP)
题目链接基础的斜率优化DP参考代码:#include #include #include #include using namespace std;const int maxn= 500050;int A[maxn] , dp[maxn] ,sum[maxn], M;int myque[maxn],head,tail,N;#define Y(i) (dp[i]+su原创 2013-11-12 11:32:36 · 974 阅读 · 0 评论 -
HDU 4258 Covered Walkway(斜率优化DP)
题目链接和POJ 3709 K-Anonymous Sequence是完全类似的题目,只是状态方程变了而已。dp[ i ] = min { dp[ j ] + (A[ i ] - A[ j + 1])*(A[ i ] - A[ j+1 ] ) + C | j单调队列维护下凸曲线。Y[ i ] = dp[ i ] + A[ i+1 ] *A[ i+1 ] , X[ i原创 2013-11-12 01:04:43 · 1017 阅读 · 0 评论 -
DHU 2993 MAX Average Program
题目链接大意:求长度不少与K的连续子序列的最大平均值。分析:DP : dp[ i ] = max { (sum[ i ] - sum[ j ] ) / (i - j) | i - j >=k } 可以通过斜率优化降低复杂度。做出 sum [ x ] - x 的函数图 , 即求x距离>=k 的两点间的最大斜率。斜率最大是必然是i 与前面的点 j 相原创 2013-11-11 20:07:57 · 780 阅读 · 0 评论 -
POJ 3709 K-Anonymous Sequence(斜率优化DP)
题目链接学习了国家集训队员周源的这篇论文《浅谈数形结合思想在信息学竞赛中的应用》,很具启发性。受益颇多。这题的一个简单的O(n^2)的DP是 dp[ i ] = min {dp[ j ] + sum[ i ] - sum[ j ] - ( i - j ) * a[ j+1 ] | i - j >= k } (sum[ i ]为前缀和) 。 直接这么做肯定TLE,重点是如何优原创 2013-11-11 01:30:59 · 1031 阅读 · 0 评论 -
POJ 2374 Fence Obstacle Course(map优化DP)
题目链接用下面这个图辅助说明这题只需要从上到下按层 维护图中这些虚线即可。例如当前需要在图中红栏杆处做决策时,需要把上面的三条虚线删除,而添加两端点处的新路径,路程当然要去上面三条路的最小值 。代码:#include #include #include #include #include using namespace std;const int max原创 2013-11-10 16:45:38 · 726 阅读 · 0 评论 -
UVA 10635 Prince and Princess [序列无重复元素时 LCS转换成LIS问题求解 O(nlogn) ]
题目链接:将第一个序列映射到1......n^2, 第二个序列按该映射重新编号,但注意第一个序列没出现的可以直接删除。接下来问题就转换为经典的LIS,该问题可在O(nlogn)内解决。代码:#include #include #include #include using namespace std;const int maxn=250*250+50 , INF=(i原创 2013-11-04 21:56:53 · 791 阅读 · 0 评论 -
USETC 1501 Defence Linces(DP+线段树+离散化)
题目链接题意: 允许扣去一个连续子串的情况下,求剩下串的最长连续增长子串。 长度第一次使用离散化。其核心是: 利用数据个数相对较少,将N个数据建立与整数1~N的映射。 方法是, 先排序 ,再二分查早序号。而线段树可以用来维护区间最大值, 这里是最大“没有间隔的连续子串长度”。离散化和线段树只是用来优化的,下面解释一下算法主题:DP个人认为动态规划最重要的是状态表示和状原创 2013-10-18 22:48:37 · 719 阅读 · 0 评论 -
UVA 11081 Strings
题目: 把A的子串和B的子串 穿插 起来,问用多少种方案的到C, 如Now suppose there are two subsequences “abc” and “de”. By combining them you can get the following strings “abcde”, “abdce”, “abdec”, “adbce”, “adbec”, “adebc原创 2013-10-10 12:03:18 · 655 阅读 · 0 评论 -
SPOJ - GCJ1C09C Bribe the Prisoners
SPOJ - GCJ1C09C Bribe the Prisoners每释放一个犯人,就必须贿赂所有此消息能够传到的人,安排最佳释放顺序,求最少用钱。用dp[L , R] 表示释放[L , R]范围内的所有需要释放的犯人所需金钱 ,想到此区间dp的话,接下来就不难解了。虽然L和R最大值都是10000 , 复杂度却不是10000^2 ,实际上L和R的值只和犯人位置有关 , 故原创 2014-01-11 07:20:12 · 1960 阅读 · 0 评论