动态规划
文章平均质量分 87
shuangde800
这个作者很懒,什么都没留下…
展开
-
UVA DP 入门专题
674 - Coin Change1713247.12%584289.90%10073734674Coin ChangeAcceptedC++2.0762012-05-04 11:09:02状态转移方程:dp[j] =原创 2012-05-04 19:15:53 · 1999 阅读 · 0 评论 -
UVA DP入门专题(二)最长公共子序列 打印方法
10285 - Longest Run on a Snowboard491055.11%203693.76%1007594310285Longest Run on a SnowboardAcceptedC++0.0242012-05-05 02原创 2012-05-05 10:17:08 · 1256 阅读 · 0 评论 -
最长上升子序列(LIS)长度的O(nlogn)算法
hdu 1950 Bridging signalshttp://acm.hdu.edu.cn/showproblem.php?pid=1950===================================最长上升子序列(LIS)的典型变形,熟悉的n^2的动归会超时。LIS问题可以优化为nlogn的算法。定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序转载 2012-04-18 19:38:13 · 52922 阅读 · 16 评论 -
UVa 10405 - Longest Common Subsequence,最长公共子序列模板题
【链接】http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=1346【原题】Problem C: Longest Common SubsequenceSequence 1:原创 2012-08-18 14:13:19 · 1563 阅读 · 0 评论 -
UVa 111 - History Grading
【题目链接】http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=47 History Grading BackgroundMany problems in Co原创 2012-08-19 00:03:02 · 2796 阅读 · 0 评论 -
UVa 103 - Stacking Boxes
【题目链接】http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=114&page=show_problem&problem=39【原题】 Stacking Boxes BackgroundSome concept原创 2012-08-19 00:04:37 · 2299 阅读 · 0 评论 -
多进程DP
传纸条 http://www.rqnoj.cn/Problem_400.html【问题分析】这个题目要求我们在一个给定的矩阵中选择不相交的两条路径(首尾除外,而且必须相交),使得路径上的所有数和最大。【算法描述】这类题目有两种做法,一种是动态规划,一种是最小费流。由于最小费流实现比较复杂,没有什么实际意义,所以不再赘述。由于两条路径的长度相等,可以用f[k][p][q][x][原创 2012-05-07 19:08:36 · 1331 阅读 · 0 评论 -
矩阵连乘问题
写给自己的话: 有时候虽然一道题懂做了,但是发现写解题报告时,要清楚把自己的思路描述出来却挺难的。做解题报告不仅可以巩固、梳理知识,还可以加深理解。现在我还做得很不好, 一定要坚持! 加油! 矩阵链乘问题:例子:(下面第二个{P1应该是P2)void MatrixChain() {原创 2012-05-09 22:33:27 · 2398 阅读 · 2 评论 -
HDU 3339 In Action(最短路+背包)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3339题目:Problem DescriptionSince 1945, when the first nuclear bomb was exploded by the Manhattan Project team in the US, the number of原创 2012-10-13 09:41:49 · 1271 阅读 · 0 评论 -
uva 1330 - City Game
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=4076以前做过一道一维的,这题只是变成了二维的,其他方法都一样。HDU 1506 Largest Rectangle in a Histogram原创 2013-03-27 23:05:40 · 1392 阅读 · 0 评论 -
poj 3211 Washing Clothes(01背包)
链接:http://poj.org/problem?id=3211题目大意:Dearboy和他的女朋友一起洗m件衣服,共有n总颜色(每件衣服只有一种颜色)。 为了放置不同颜色互染,每次只能洗一种颜色的衣服,在这件衣服洗完之前不能洗另外一种衣服。 Dearboy和他女朋友可以同时一起洗衣服,但是不能同时洗同一件衣服,也不能同时洗不同种颜色的衣服。 一只每件衣服所需时间,问原创 2013-05-21 01:09:36 · 997 阅读 · 0 评论 -
poj 2642 The Brick Stops Here(01背包)
题目链接:http://poj.org/problem?id=2642题目大意:黄铜砖是由铜和锌两种元素组成的,每一块黄铜砖中1000克,铜占其中的1~999克之间。铜占比重不同的黄铜砖是属于不同类的。有N个黄铜砖,给出它们的铜占的重量以及价格。现在有c个客户,每个可以要买Mi个不同类的黄铜砖,要求把Mi个黄铜砖融化后,铜站的比率为每千克在 【CMin,CMax】克之原创 2013-05-20 21:28:28 · 1293 阅读 · 0 评论 -
poj 2923 Relocation (枚举+背包 | 状态压缩+01背包)
链接:http://poj.org/problem?id=2923题目大意:有N件家具,每件的重量为(1 ≤ wi ≤ 100), 用两辆车把他们来运送到目的地。这两辆车的限载重量分别为C1, C2(1 ≤ Ci ≤ 100) , 问最少几趟可以把所有家具运送到目的地。这两辆车每趟都必须一起走,即使某辆车没载东西。思路:(一)先上自己的方法:枚举原创 2013-05-21 23:33:31 · 1424 阅读 · 1 评论 -
poj 3628 Bookshelf 2(dfs, 01背包)
题目链接:http://poj.org/problem?id=3628题目大意:有n个数字(1~100W),现在有一个数b,1思路:刚开始看到这题,发现数字这么大,以为内存不够不能用背包。而n最大才20,所以直接用dfs+减枝0MS过了。。。然后用背包,开了2000W+的数组,memset初始化,果断地MLE了。。。然后看了下discuss,发现原创 2013-05-20 23:34:42 · 1123 阅读 · 0 评论 -
hdu 2639 Bone Collector II (dp 01背包求第k优解)
题目:点击打开链接题目大意:有n件物品,每件物品有体积和价值两个属性, 一个小偷带着一个大小为v的背包,要偷这些东西,问小偷能偷的第k大的价值是多少?思路:这题和典型的01背包求最优解不同,是要求第k大的解,所以,最直观的想法就是在01背包的基础上再增加一维,用来保存前k大小的数,然后在递推时,根据前一个状态的前k大小的数推出下一个阶段的前k个数保存下来。原创 2013-05-24 10:34:50 · 1193 阅读 · 0 评论 -
poj 1948 Triangular Pastures (dp 二维01背包)
题目:点击打开链接题目大意:给N条边,把这些边组成一个三角形,问面积最大是多少?必须把所有边都用上。思路:对于已知周长的三角形,我们只要知道两条边的长度变可推出第三条边,所以可以得到状态方程:f[i][j][k] 表示用前i条边,能否组成长度为j和k的两条边初始化f[0][0][0] = true;f[i][j][k] = f[i-1][j-len[i]原创 2013-05-23 10:07:52 · 1713 阅读 · 3 评论 -
poj 1837 Balance (dp 01背包)
题目:点击打开链接题目大意:有一个天平,天平左右两边的手臂长度都是15,手臂上面有些位置会有挂钩。还有G个砝码 (1 给出C个挂钩,它们的位置在【-15..15】,不会重叠。负号的代表在左边臂,正号的在右边。要求把所有砝码都放在挂钩上,多个砝码可以挂在同一个挂钩上,问有多少种不同的方案使天平能够平衡?思路:天平左臂的力矩和是负数,右边的力矩和是正数,原创 2013-05-23 09:40:12 · 1247 阅读 · 0 评论 -
poj 1976 A Mini Locomotive (dp 二维01背包)
题目链接:http://poj.org/problem?id=1976题目大意:某个车站有N个火车车厢,编号为1~N,每个车厢上有xi个人。这个车站还有三个火车头,他们能拉最多m个车厢(m思路:因为m然后,为了求某段连续的车厢共有多少人,可以前缀和预处理, 某一段和=sum[ i ] - sum[ i-m].f[i][j] 代表前原创 2013-05-21 20:36:37 · 1333 阅读 · 0 评论 -
HDU 2126 Buy the souvenirs (dp 二维01背包)
题目: 点击打开链接题目大意:有n(0思路:这题还是比较容易想到的f[i][j][k], 表示前i个物品,用费用j,买k个物品共有多少个方案得到状态转移方程:f[i][j][k] += f[i-1][j-c[i]][k-1];初始化f[0][0][0] = 1代码:#include#include#include#inc原创 2013-05-24 11:03:02 · 861 阅读 · 1 评论 -
hdu 4558 剑侠情缘(dp, 西山居复赛1第2题)
题目:点击打开链接思路:这是刚练dp后做比赛遇到的第一道dp题比赛时想了一个状态转移方程,f[i][j][k][l][2], i和j表示在第i行j列, k和l表示人和剑的能量,最后一维0表示当前这个能量给人补充,1表示给剑补充转移为: f[i][j][k][l][0] = f[i-1][j][k-mat[i][j]][l][1]+f[i][j-1][k-mat[i]原创 2013-05-25 23:25:28 · 2046 阅读 · 0 评论 -
POJ 2184 Cow Exhibition (dp 转换01背包)
题目:点击打开链接题目大意:有N个物品,每个物品有属性Si和Fi,-1000 思路:这题想了很久都没思路,于是跟前辈请教了下,恍然大悟。把属性Si当做是物品的费用,Fi当做是价值,然后做01背包即可。代码:#include#include#include#include#include#include#include#include原创 2013-05-29 17:19:42 · 993 阅读 · 0 评论 -
poj 2392 Space Elevator(dp 排序+多重背包)
题目:点击打开链接题目大意:有n种砖头,每种砖头的高为h,数量为c, 且它放的最高位置不能超过a。 问这些砖最高能够叠多高?思路:先把所有种类砖头按照a从大到小排序,然后直接套多重背包即可。代码:#include#include#include#include#include#include#include#include#inclu原创 2013-05-31 21:51:46 · 978 阅读 · 0 评论 -
poj 2063 Investment (dp 完全背包)
题目: 点击打开链接题目大意:有n种债券可以买,每种的价钱分别为a(a是1000的倍数),每年利息为b 。某个人共有钱tot(tot是1000的倍数),问他在y年后,最多可以有多少钱?思路:由于tot和a都是 1000的倍数,所有在计算时可以把他们缩小1000倍,这样节约内存和时间。按照贪心的思想,每一年都用完全背包求出这一年最大可以得到的利息,然后下一年再用加原创 2013-05-31 22:00:19 · 1505 阅读 · 0 评论 -
uva 10891 - Game of Sum(博弈,区间dp)
点击打开链接题目大意:原创 2013-07-31 13:28:19 · 846 阅读 · 0 评论 -
uva 10534 - Wavio Sequence(nlgn复杂度LIS)
点击打开链接题目大意:Wavio Sequence是这样的一种数字序列:它的长度为2*n+1, 前n+1个数字是严格递增的,后n+1个数字是严格递减的。然后任意给一个序列,问它的Wavio Sequence子序列最长可以是多少?分析:对于第i个字符,如果我们知道0~i的最长递增序列, 并且知道i~n的最长递减序列,那么我们就可以知道以i为中心点的最长的Wav原创 2013-07-31 16:20:28 · 1778 阅读 · 0 评论 -
HDU 4628 Pieces(状态压缩dp)
点击打开链接题目大意:给一个字符串,每次可以删除一个可不连续回文子串,问最少删几次可以全部删完。思路:因为字符串长度最大16,所以可用二进制状态表示, 1表示选取这个字符,0不选,组成一个子串。先预处理出所有状态,看这个状态是不是回文。f[i]表示状态i最少几次可以全删完, 初始化f数组INFf[i] = min{f[i], f[s] } s是i的子集。原创 2013-07-31 11:55:52 · 1358 阅读 · 0 评论 -
poj 2411 Mondriaan's Dream(状态压缩dp)
点击打开链接#include#include#include#include#include#includeusing namespace std;typedef long long int64;const int INF = 0x3f3f3f3f;const int MAX_STATE = (1<<11)+10;const int MAXN = 12;原创 2013-07-31 11:01:19 · 942 阅读 · 0 评论 -
poj 1185 炮兵阵地(经典状态压缩dp)
点击打开链接#include#include#include#include#include#include#includeusing namespace std;typedef long long int64;const int INF = 0x3f3f3f3f;const int MAX_STATE = (1<<10)+10;const int MAXN =原创 2013-07-31 12:05:16 · 812 阅读 · 0 评论 -
uva 11584 - Partitioning by Palindromes(简单dp)
点击打开链接题目大意:给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。分析:f[i]表示以i结尾的串最少可以分割的串数。f[i] = min{ f[j]+1, 串[j,i]是回文串&&1代码:#include#include#include#include#include#includeusi原创 2013-07-31 16:01:15 · 4720 阅读 · 0 评论 -
UVA 1424 - Salesmen (dp)
题目:点击打开链接题意:给一个n个点m条边的有向无环图,再给一个长度L的序列A,然后求图中的一条长度为L的路径B(这条路径的同一个点可以连续重复出现多次)问路径B和序列A不相等的数最少多少, 即Ai != Bi, 0思路:刚看这题,就觉得像树形dp,最终做出来不像树形dp。。f[i][j]表示i点,在路径序列的前j点中的最小距离。那么j=0,原创 2013-07-31 18:55:30 · 1460 阅读 · 0 评论 -
UVA 607 - Scheduling Lectures (线性dp)
题目点击打开链接题目大意:你在一所学校教书,每节课时长L,你有n个主题必须要讲完,每个主题时常为ti。有两个限制:1,每个主题只能在一节课内讲完,不能分开在多节课;2,必须按主题顺序讲,不能打乱。对于每节课,讲完主题的内容会剩下时间t,如果t>10,会产生不满意度(t-10)^2,如果 1问讲完所有主题,最少要用多少节课?如果有多种方案,要求不满意度最低。分原创 2013-08-01 10:44:36 · 1432 阅读 · 0 评论 -
UVA 590 - Always on the run (dp)
题目:点击打开链接思路:这题主要是题目比较难看懂,看懂之后就比较容易了。f[i][j] 表示第i天,到城市j的最少总花费那么可以得到状态转移:i=0, f[1][j] = cost[1][j][0];i>0, f[i][j] = min{f[i][j], f[i-1][k]+cost[k][j], k!=j}代码:#include原创 2013-07-31 20:53:28 · 1471 阅读 · 0 评论 -
HDU 4632 Palindrome subsequence(区间dp)
题目点击打开链接题目大意:给一个长度最大10000的字符串,问它有多少个回文子串(不用连续)。如果取自不同位置的,但是完全相同的子串,也算是不同的回文子串。分析:f[i][j] 表示字符串的i~j段共有多少个不同子串那么f[i][j] = f[i][j-1] + f[i+1][j] - f[i+1][j-1]如果str[i] == str[j], 那原创 2013-08-01 17:18:42 · 1134 阅读 · 0 评论 -
UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)
题意:汉诺塔游戏请看 百度百科正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n-1步才能达到目标。但是在这题中,有4根柱子,并且按照下面规则来玩:1. 先把圆盘顶部前k个盘子全部搬到第四根柱子上,2. 然后把剩下的n-k个盘子在前3根柱子中按照经典的规则搬到某个柱子上(假设是a柱),3. 最后再把那k个盘子搬到目标a柱上。问按照这样的规则,最少需要几步?原创 2013-08-02 10:12:40 · 2397 阅读 · 0 评论 -
UVA 10564 - Paths through the Hourglass (dp)
给一个相上面的图。要求从第一层走到最下面一层,只能往左下或右下走,经过的数字之和为sum。问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径。思路:f[i][j][k] 代表从(i,j)点往下走到最后一层和为k的方案数那么,显然可以得到状态转移:f[i][j][k] = f[i+1][left][k-val] + f[i+1][right][k-val], val=(i,j)格上的数字,left是往坐下走的坐标,right往右下走的坐标原创 2013-08-02 17:52:00 · 1601 阅读 · 0 评论 -
UVA 473 - Raucous Rockers (dp)
题意有n首歌,每首时长Ti,要把这n首歌装进m个光盘里面,每个光盘最多能存的时长为t要求这些歌在光盘里面要按照所给歌的先后顺序存入,不能改变前后顺序。例如有4首歌,按顺序给出他们的时长:1,2,3,4.装入一个容量时长为10的光盘里, 可以是1,2,3或者1,3,4等,但是不能2,1,3问最多能存几首歌?思路:用f[i][j][k]表示前i首歌,用j个光盘,且第j个光盘用了k的时间,可存的最多首歌当枚举到第i首歌,用到第j个光盘时,有决策以及状态转移:原创 2013-08-02 15:47:36 · 2036 阅读 · 0 评论 -
HDU 1520 Anniversary party(简单树形dp)
本文出自 http://blog.csdn.net/shuangde800题目点击打开链接题意:给出一棵树 每个节点有权值 要求父节点和子节点不能同时取 求能够取得的最大值思路:树形dp的入门题f[u][0]表示以u为顶点的子树,不选u点的情况下最大值f[u][1]表示以u为顶点的子树,选u点的情况下最大值那么,f[u][原创 2013-08-03 13:35:14 · 2234 阅读 · 0 评论 -
HDU 2196 Computer(树形dp经典)
题意:给出一棵树,求离每个节点最远的点的距离思路:代码:/**========================================== * This is a solution for ACM/ICPC p原创 2013-08-03 22:57:06 · 12195 阅读 · 3 评论 -
UVa 11795 - Mega Man's Mission(状态压缩dp)
题意:你最初只有一个武器,你需要按照一定的顺序消灭n个机器人(n<=16)。每消灭一个机器人将会得到他的武器。每个武器只能杀死特定的机器人。问可以消灭所有机器人的顺序方案总数。思路:看到了n的规模这么小,就知道可以用状态压缩解决了。原创 2013-08-03 23:18:34 · 2499 阅读 · 0 评论 -
UVa 1366 - Martian Mining (dp)
题目大意给出n*m网格中每个格子的A矿和B矿数量,A矿必须由右向左运输,B矿必须由下向上运输,管子不能拐弯或者间断。要求收集到的A,B矿总量尽量大。思路由题意可知,如果格子(i,j)上选择运输A矿的话,那么i行的1~j就要全部选择A矿。同理,如果选择B矿,那么第j列上的1~i行要全部选择B矿所以推出下面的状态转移方程式:f[i][j][0]表示第i行第j列为右下角顶点的矩形区域内,格子(i,j)上选择运输A矿情况下的最大总和f[i][j][1]表示第i行第j列为右下角顶点的矩形区域内原创 2013-08-05 18:42:16 · 1527 阅读 · 0 评论