动态规划
文章平均质量分 76
xiaoxiaoluo
这个作者很懒,什么都没留下…
展开
-
算法导论 15-2 整齐打印
看了这个人写的解题思路状态转移方程,这里只是用代码实现了下http://blog.csdn.net/wenlei_zhouwl/article/details/5992367问题: 考虑在一个打印机上整齐地打印一段文章的问题。输入的正文是n个长度分别为L1、L2、……、Ln(以字符个数度量)的单词构成的序列。我们希望将这个段落在一些行上整齐地打印出来,每行至多M个字符。“整齐度”的标准如下转载 2012-06-06 21:07:32 · 4629 阅读 · 6 评论 -
poj 1014 Dividing 二进制拆分,单调队列
题目大意:给你6种大理石,每种大理石i的个数为num[i],价值为i,问你有没有策略能时它分成两份,两份总价值相等。解题思路:0/1多重背包问题。dp[i][j] = max{dp[i - 1][j - k * i] + k * i} 这里的i为第i种大理石的价值, 0多重背包,根据拆分思想,把每种大理石num[i]拆分成2进制表示。然后转换成为0/1背包问题。#includ原创 2012-07-31 23:33:10 · 2118 阅读 · 0 评论 -
poj 1276 Cash Machine
题目大意:给定一个数m,还有一组数,分别表示这个元素的个数num[i], 单个价值为value[i]。要你求最这组元素价值和最接近m的最大值解题思路:多重背包问题,拆分2进制或单调队列同poj 1014一样http://blog.csdn.net/xiaoxiaoluo/article/details/78163782进制拆分方法:#include #include #in原创 2012-08-01 01:11:27 · 568 阅读 · 0 评论 -
poj 1014
参照了毛子青的《动态规划算法的优化》[问题描述]有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值和相等,问是否可以实现。其中大理石的总数不超过20000。令S=∑(i*a[i]),若S为奇数,则不可能实现,否则令Mid=S/2,则问题转化为能否从给定的大理石中选取部分大理石,使其价值和为Mid。这实际上是母函数问题,用动态规划求解也是等价的。转载 2012-03-11 15:59:33 · 1635 阅读 · 0 评论 -
NK 1137 石子合并问题
转载http://wenwen.soso.com/z/q242849819.htm?sp=1000 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。编程任务:对于给定n堆石子,编程计算合并成一堆的最小得分和最大得分。转载 2012-03-11 18:14:16 · 632 阅读 · 0 评论 -
poj 1964
转自http://blog.csdn.net/SMCwwh/article/details/5945855题目大意是要你一个子矩阵,能使得覆盖未占用的连续区域最大思路:动态规划按行来划分状态,每次求出到当前行的区域最大覆盖区域用height[i]表示第i列的当前行到达第1行未碰到占用方格的最大高度l[i]表示当前行第i列能向左边扩展到坐标(不包含l[i]),即l[i]-1到i为转载 2012-03-14 01:44:51 · 1056 阅读 · 0 评论 -
poj 1112
这道题目我一点思路都没有,不会做呀。。。。看了http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.htmlhttp://happylch21.blog.163.com/blog/static/165639759201162911032307/这两位大牛的,把他们两的结合起来~~题目的大意就是:把n个人分成2各组,转载 2012-03-20 02:15:54 · 2201 阅读 · 1 评论 -
poj 1080
这道题目很不错。题目大意是:给定两组DNA序列,要你求出它们的最大相似度每个字母与其他字母或自身和空格对应都有一个打分,求在这两个字符串中插入空格,让这两个字符串的匹配分数最大解题思路,模仿动态规划里面经典的求最长公共子序列的方法dp[i][j]表示字符串s1 1-i的和字符串序列s2 1-j的最长公共子序列的长度当s1[i] == s2[j] 时dp[i][j] = dp[原创 2012-03-18 15:47:59 · 2896 阅读 · 0 评论 -
poj 1837
参照了 http://blog.sina.com.cn/s/blog_617615cd0100ewej.html题目大意:给一个天平的悬挂点的坐标,和一些砝码,要你全部把砝码挂上去,保证天平平衡,一共有多少种方案解题思路,动态规划,转换成0,1背包问题,用dp[i][j]表示前i个砝码都挂上,平衡度为j的方案数dp[i][j + hooks[k] * weight[i]] += dp[原创 2012-03-30 01:31:08 · 587 阅读 · 0 评论 -
poj 1019
参照http://www.slyar.com/blog/poj-1019-cpp.html题目大意:就是求一个数字序列的第n位的数字是多少。这个序列a1a2a3.....ana1=1, a2=12, a3=123, ......an=1234567891011......nlen[i]表示1----i的长度s[i]表示a1a2a3...ai的长度log10(i) + 1表示i的转载 2012-03-16 00:04:11 · 1551 阅读 · 0 评论 -
poj 2374 求横向距离和最小 线段树 + 动态规划
题目的意思就是有一群牛它们懒得动,不会跳跃越过篱笆,现在它们要从S点走到最下面的谷仓*,它们往下走碰到篱笆就选择往左或往右沿着篱笆走,走到篱笆端点的时候在往下走碰到篱笆再选择往左或往右沿着篱笆走,如此,知道到达最下面的谷仓。要你求出到达谷仓沿着篱笆走的距离和最短是多少?代码copy了这位神牛的http://www.cppblog.com/varg-vikernes/archive/2012/0原创 2012-03-13 02:22:46 · 2154 阅读 · 0 评论 -
poj 1141
题目大意,给出一个表达式的子序列,要你填充这个序列,保证最终形成的序列长度最短,也就是添加的括号最少这个子序列要遵循括号匹配的原则。这道题目的思想和《算法导论》里动态规划里介绍的求多个矩阵相乘需要的操作最小是一样的dp[i][j] 表示i到j坐标所要求加括号最小的个数那么dp[i][j] = min(dp[i][k] + dp[k+1][j]) i dp[i][i] =原创 2012-03-21 00:33:14 · 1704 阅读 · 0 评论 -
poj 1655
参考杜宇飞神牛~http://hi.baidu.com/billdu/blog/item/6ef3e5029ce7d586d43f7cdb.html题目大意:给一个树,删除其中一个点就会形成一个森林,点的平衡度为删除了这个节点后,所形成多个树,其中组成树的节点最多,节点个数就是那个平衡度。要你求出最小平衡度,输出这个节点和平衡度,要是有多个节点的平衡度一样,输出节点序号最小。解题思路,转载 2012-03-25 00:48:28 · 1630 阅读 · 0 评论 -
hdoj 2196Computer 树形DP
参考:http://blog.csdn.net/woshi250hua/article/details/7642536题目大意:求树中每个点出发的最长链的长度解题思路:建立树的每个节点的双向边,先按照树的根节点1出发,深度遍历求得以每个节点u为根节点子树到叶子节点v的最大距离dp[u],这次深度遍历的过程中,u到叶子节点v是以u为根节点的子树的最大距离,保存v到u的父节点的距离len。转载 2012-08-18 17:10:05 · 510 阅读 · 0 评论 -
poj 1947 Rebuilding Roads 树状DP + 分组背包
题目大意:给定一颗树,要你求删除一些边使得形成包含p个节点的子树,要删除的最少边。注意,这颗子树的根节点不一定是整颗树的根节点。解题思路:树状DP,dp[i][j]表示以i为根节点的子树,包含j个节点(包含了i)删除最少的边。dp[i][1] = i的孩子节点数,因为只有i子树包含1个节点,即自身,删除连接它孩子结点所有边。dp[i][j] = min(dp[i][k] + dp[原创 2012-08-18 23:51:45 · 766 阅读 · 0 评论 -
poj 1239
参照http://blog.csdn.net/a342374071/article/details/6689232题目大意就是给定一些数字串,要你分别对每个数字串用逗号隔开,这样每个数字串中的数字保证是严格单调递增,且保证分隔后,最后的那个数字最小,当多种情况时要,那么取分隔后的第一个数字最大的,要是第一个数字也相同,那么看分隔后的第二个数字,如此下去,数字前面可以出现0,即000001表示1转载 2012-03-24 16:45:30 · 1609 阅读 · 4 评论 -
poj 1920 Towers of Hanoi
参考了http://hi.baidu.com/findthegateopen/blog/item/0bb4a739002afecad462257a.html这位神牛的题目大意就是已给一个汉诺塔的摆放状态,要你求出现在这个状态下,到达最终的结果状态即从小到上方块递减。所用的移动次数最少。最终状态可以在任意一个铁杆下。要求输出最终状态所在的铁杆号和最小移动步数很显然,最终状态所在的铁杆号就原创 2012-03-15 02:58:05 · 1517 阅读 · 1 评论 -
poj 1141 Brackets Sequence 括号匹配
题目大意:给你一个字符串由(,),[,]组成,括号之间可以嵌套匹配比如:(), [], (()), ([]), ()[], ()[()] 这些是正确的匹配(, [, ), )(, ([)], ([(] 这些是错误的匹配要你求最少需要加多少个括号能补齐,输出补齐后的序列解题思路:动态规划dp[i][j]表示字符串系列i~j匹配,需要添加的最小括号数path[i][原创 2012-11-10 16:42:27 · 5235 阅读 · 0 评论 -
poj 1934 Trip 多个最长公共子序列
题目要你按字典序输出两个字符串的多个最长公共子序列转自http://blog.csdn.net/tsaid/article/details/6726698思路:先用动态规划求两个字符串的最长公共子序列的保存在dp[i][j];dp[i][j]表示s1字符串1到i和s2字符串1到j的最长公共子序列的长度然后用两个变量last1[i][j],last2[i][j]来分别保存字符j(a的转载 2012-11-10 16:48:19 · 7973 阅读 · 0 评论 -
poj 2677 双调欧几里得旅行商问题
这里http://blog.sina.com.cn/s/blog_51cea4040100gkcq.html解释的很详细了。题目大意:这是算法导论动态规划的思考题15-1,求从坐标的的最左端的点走到最右端的点,每次走到下一个点只能选在当前点的右边的点,到达最右点后又从最右点返回到最左点,返回时只能选当前点的左边的点,且不能跟之前走的点重合。解题思路:动态规划,可以认为两个人在同时往右走,且转载 2012-06-06 07:54:29 · 3228 阅读 · 0 评论 -
poj 2287 Tian Ji -- The Horse Racing
题目大意:田鸡赛马的故事田鸡和国王打赌赛马,田鸡和国王手上有相同数量的马,n匹马,一共要塞n场,每场要是田鸡的马赢了,就赢200两银子,输入就输200两,打平就不得钱。问怎样安排场次要是能赢可以使得田鸡最后赢钱最多,要是输,能使田鸡输的钱最少?解题思路:贪心+DP国王的马的出场顺序是固定的,而田鸡的马出场顺序可以有很多种,在这很多种中找出最优的。有3种情况:1、如果田忌原创 2012-10-05 23:01:25 · 4899 阅读 · 0 评论 -
机器分配问题
Description总公司拥有高效设备M台,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。Input输入数据文件格式为:第一行有两个数,第一个数是分公司数N,第二个数是设备台数M。原创 2012-10-02 22:02:32 · 8824 阅读 · 1 评论 -
poj 2184 Cow Exhibition
题目大意:给定一组成员,每个成员包含ts,tf两个值,两者都有负值,要你从这组成员中选出一些成员,保证ts的和不为负数,tf的和也不为负数,并且ts的和与tf的和最大。解题思路:背包问题,把ts看做容量,tf看做价值,由于有负值,所以把最小负值平移到原点。当ts为正数时,由于要利用到上次求到的结果,并且每个物品只能选一次,所以,按照从大到小扫描当ts为负值时,从小到大扫描#incl原创 2012-09-10 01:12:18 · 949 阅读 · 0 评论 -
poj 1717 Dominoes
转自http://hi.baidu.com/flabbyan/item/5383903d55235f647d034b70题目大意:给成一组多米诺牌,每个多米诺牌由上面和下面两组数组成,现要求可以翻动颠倒上下,使得多米诺上边的点数和减去下边的点数和的绝对值最小解题思路:之前想的一个。。。。用一个dp[i[0]表示第i个没颠倒的前i个牌和之差,dp[i][0]= dp[i-1][1转载 2012-09-09 18:12:54 · 1742 阅读 · 1 评论 -
poj 1644 To Bet or Not To Bet
题目大意: 类似于一个抛硬币下棋的游戏,棋盘是一个线性表,初始位置在最左端start处,目标在最右端end处,中间有m格,每格上都会有一个说明+n,-n,L,或者 0,分别意味着向右走n格,向左走n格,失去一轮机会,无任何说明。每一轮都会先抛硬币,正面朝上向右走一步,反面朝上向右走2步,正反面朝上的几率是相同的,各占二分之一。现在给出棋盘的大小,以及棋盘上每一格的说明,求在t轮或者少于t转载 2012-08-25 15:44:09 · 1039 阅读 · 0 评论 -
poj 1322 Chocolate
题目大意:c种不同颜色的巧克力,每种巧克力同样多,把巧克力一个一个拿到桌子上,当发现有相同颜色就全吃掉,求取出了n个后,还剩m个在桌子的概率。解题思路:dp[i][j]表示取出了i块巧克力,剩下了j块的概率动态规划,当m,n同奇同偶时dp[i][j] = d[i - 1][j - 1] * (c - j + 1) / c + dp[i - 1][j + 1] * (j + 1) / c原创 2012-08-23 01:43:02 · 1321 阅读 · 0 评论 -
poj 2479 求两段子数组和相加的最大值
题目大意:给出一组数字序列,要你求出两段子数组和两者相加的最大值解题思路:求出1~i的序列的子数组和的最大值,i~n的序列的子数组和的最大值然后枚举k, 1关于求数组连续的子数组最大和,《编程之美》上有O(n)的求法。求法如下: 考虑元素a[k], 以及最大的一段数组a[i]~~a[j] 1.当k = i = j时,元素a[k]本身构成了和的最大一段。2.当k=i原创 2012-06-18 01:56:52 · 1668 阅读 · 0 评论 -
poj 1192
http://blog.csdn.net/birdforever/article/details/5874502题目中文。。。。但是描述得很复杂。。。不知道为啥要这样,其实就是一个求无向树的所有子树和的最大值树形dpdp[i][0]表示以i为根,不包括i结点的子树获得最大权dp[i][1]表示以i为根,包括i结点的子树获得的最大权dp[i][0] = max(dp[k][0转载 2012-03-22 23:13:57 · 1372 阅读 · 6 评论 -
poj 1170 多重背包
还是看了这位大牛的http://www.chenyajun.com/2010/05/30/4597题目大意:其实就是个全背包问题~~动态规划给出每种物品的单价,和个数,然后给出这些物品的组合的优惠策略,要你求出购买这些物品的最小消费。《编程之美》里有个买书的问题,跟这题很像。这题难就难在动态规划的维度过多,比如就有3个品种的物品,有种打折策略dp[i][j][k]表示物品0转载 2012-03-22 02:05:14 · 747 阅读 · 0 评论 -
poj 1948 Triangular Pastures 二维背包
题目大意:给定一些棍子求这些棍子能够组成的三角形的最大面积。解题思路:这里要利用三角形的面积公式p = (a + b + c) / 2, 周长的一半三角形面积 = sqrt(p * (p - a) * (p - b) * (p - c))dp[k][i][j]表示前k根棍子,边长为i和j是否能组成一个三角形。所以dp[k][i][j] = dp[k-1][i - edge[k]原创 2012-08-11 00:03:43 · 556 阅读 · 0 评论 -
POJ 1143 Number Game
http://blog.csdn.net/zhengweihit/article/details/5799427http://wenku.baidu.com/view/e747a907e87101f69e319507.html题目大意:Christine和Matt玩一个游戏.游戏的规则如下:一开始有一列数字(2~20),有的被列出,有的没有列出.从Christine开始,两人轮流划转载 2012-07-26 23:14:02 · 781 阅读 · 0 评论 -
poj 1088 滑雪问题
题目大意:中文。。不解释解题思路:动态规划,这里要求从一个点往上下左右移动,要满足高度差,我们可以把每个位置记录保存好,按照高度,从小到大排列,然后利用动态规划往一个高度增长的方向就可以处理,转换为类似于最长递增子序列问题#include #include #include #include using namespace std;struct node{原创 2012-07-26 15:04:30 · 903 阅读 · 0 评论 -
poj 2465 Adventures in Moving - Part IV
题目大意:有一辆卡车,从一个城市A到达城市B,车的油箱为200,初始有100的燃料,每走一个单元路程消耗1个单元的燃料。这里有几个加油站,每个加油站是按照距离A城市的距离从小到大排列的,每个加油站每单元的燃料的价格是不同的。要你求卡车到终点加燃料的花费最小时多少,若卡车到不了终点,输出Impossible解题思路:动态规划,dp[i][j]表示行驶到第i个加油站,燃料为j是的最小花原创 2012-08-10 10:37:24 · 883 阅读 · 0 评论 -
poj 1018 求B/P最大值
动态规划方法参照:http://hi.baidu.com/guzhou_diaoke/item/b7d0840e1461919ba3df431f题目大意:有n件商品,每件商品有m个制造商,每个制造商制造的商品有不同的 带宽和价格,每件商品必须选一个制造商,最后的带宽是所有带宽中的最小值,价值是所有商品的总价格,目的是使B/P最大,输出最大的B/P的值。解题思路:动态规划dp[i][j]转载 2012-07-26 01:03:12 · 2537 阅读 · 0 评论 -
poj 2392 Space Elevator
题目大意:有k中梯子材料,每种材料有个数c_i, 高度h_i,并且这种材料高度不能超过a_i ,问利用这些材料能最高堆多高的梯子。解题思路:先按照a_i从小到大排序,然后分别把a_i作为容量,转换成多重背包问题。二进制拆分:#include #include #include #include using namespace std;struct node{ int h原创 2012-08-01 23:42:37 · 567 阅读 · 0 评论 -
poj 1692 求数字匹配对数
题目大意:给定两组数字,求这两组数的最大匹配对数,即两个数相等就连一条线。匹配的连线需要交叉,一个数字匹配过后不能再次匹配解题思路:动态规划。dp[i][j]表示,第一组数前i个与第二组数前j个的最大匹配数。那么dp[i][j] = max(dp[i-1][j-1], dp[i-1][j], dp[i][j-1], dp[k1][k2] + 2)k1,k2表示当num1[i原创 2012-07-16 00:49:26 · 1132 阅读 · 0 评论 -
poj 1636 监狱布局 dfs + dp 或 传递闭包 + dp
http://www.cnblogs.com/zhaoguanqin/archive/2012/04/03/2430895.html题目大意:有两个牢房,人数相等,都为m,现在要求交换这两个牢房的囚犯,其中有些囚犯是不能放在同一个牢房的,要你求出交换次数最大为多少,且不超过m/2解题思路:动态规划+深度优先遍历。dp[i][i]表示i对人交换成功。标记出两个牢房A,B, A中的转载 2012-07-13 01:46:09 · 1994 阅读 · 3 评论 -
poj 1015 选配陪审团(对于维度中有负数的情况)
题目大意:给出一组陪审团,里面有n个人,其中每个人i都有等概率的支持或反对一个决定,支持一个决定的分数为Ai,反对一个决定的分数为Bi要你求出,在n个人里面选出m个人,使得这m个人在| sum(Ai - Bi) | i属于[1, m] , 绝对值最小时,sum(Ai + Bi)最大,输出这种选择策略下,赞成一个决定的总分数,和反对一个决定的总分数,并要求出选举的策略。解题思路:动态规划。原创 2012-07-12 00:58:17 · 981 阅读 · 0 评论 -
算法导论 15-4 数形DP poj 2342
这个道题跟poj 2342上的一样。题目大意:就是一个树,树的每个结点有个值,选了某个结点,就不能选择它的父结点,求整棵树选的节点值最大是多少。解题思路:简单的树形DPdp[i][0]表示不选i结点时,i子树的最大价值dp[i][1]表示选i结点时,i子树的最大价值那么列出状态方程dp[i][0] = sum(max(dp[u][0], dp[u][1])) u 为结点i原创 2012-06-18 22:47:50 · 1358 阅读 · 0 评论 -
poj 1037 动态规划 + 计数,求排列布局
这道题,黑书上p257有解题的分析,之前没看明白~~,网上搜了一大堆看了http://jay23jack.blog.163.com/blog/static/317951942009130215813/http://blog.csdn.net/geniusluzh/article/details/6936063这两位大牛的报告题目的大意就是一些装饰栏,编号为1,2,3,...,n,他们的原创 2012-03-18 01:38:46 · 1226 阅读 · 0 评论