DP学习笔记
zhengweihit
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 1018 Communication System
继续学习DP,但是这个题目好像说是枚举更为恰当。到现在还学习这种东西,于是又一顿鄙视自己先。题目来源 题目大意懒得自己写,于是网上摘录了别人翻译的题目大意:产品有n个部分 组成 每个部分有m种选择,每个部件 有bandwith和price两种属性。求:一种选择方案使B/P 最大 其中 B是各个部件bandwith的最小值 P是各个部件price的和。来源 利用枚举带宽(bandwidth),即可通过找到价格(price)最小值和来贪心的找到B/P的最大值。 交了好几次过不去,于是Google了原创 2010-08-05 23:22:00 · 983 阅读 · 0 评论 -
POJ 1276 Cash Machine(多重背包)
本题完全模仿《背包问题九讲》。一会儿去好好学习下背包问题。注明一点,cost和weight是一样的,可以省略一个参数和一个数组(我没省)。不能多说了。贴上我微弱的代码: 1: #include 2: #include 3: #include 4: using namespace std; 5: const int CASH_SIZE = 100001; 6:原创 2010-08-14 14:01:00 · 399 阅读 · 0 评论 -
POJ 1179 Polygon(DP)
本题一次水过,由此纪念一下。(实际上,我这个年纪做这种题实在很丢人)。 题目链接。大意:给一个多边形,每个顶点有一个值,每个边编号从1到N,边的属性是加或者乘。首先先拆掉一条边,剩下的如下做:选定一条边以及这条边的两个端点(两个数)用新顶点替换(新顶点即:按照这条边的属性(加或乘)算出这两个数的乘积或者和)。到最后剩一个点,也就是一个值。求这些值的最大值输出,并输出此时最先拆掉的是哪条边。 用2个一维数组存放这个多边形,其一存放点,其二存放边(加或者乘)。将这2个数组当作循环队列一样的使用即可穷举去掉的原创 2010-08-11 19:17:00 · 610 阅读 · 0 评论 -
POJ 1163 The Triangle (DP)
题目链接。这个题目很简单,于是很快就1次过了。DP问题。 直接给出状态转移方程: dpRes[i][j] = max(dpRes[i-1][j-1], dpRes[i-1][j])+A[i][j] .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color:原创 2010-08-09 21:27:00 · 517 阅读 · 0 评论 -
POJ 1178 Camelot (floyed算法)
本题没有读懂题目,想偏后导致各种不顺。我理解的是每个骑士间和国王都可以同步的移动。原来是一次只能移动一个人,求总步数最小。于是就简单多了。开始想歪后,在论坛找到一种说法:预处理+纯暴力。原文说“枚举64个终点 * 枚举64个接国王点 * 枚举64只来接的骑士 总复杂度O(64*64*64)”。这时候我才明白原来题目意思是要求求所有步数的最小值。Google题目的翻译。 这里是题目链接。题目大意:棋盘上有1个国王和若干个骑士,要把国王和每个骑士移动到同一个格子内,问需要移动的最小步数是多少。如果国王和骑士走原创 2010-08-10 21:40:00 · 1228 阅读 · 0 评论 -
POJ 1157 LITTLE SHOP OF FLOWERS (DP)
題目大意:有F束花和V个花瓶,把F束花放在V个花瓶里面,一个花瓶放一束,要求是第i束必须放在第j束前面(i 2: #include 3: using namespace std; 4: const int FLOWER_SIZE = 100; 5: const int VASE_SIZE = 100; 6: const int MIN_INT = -(1> flowers >> vase原创 2010-08-09 20:37:00 · 670 阅读 · 0 评论 -
POJ 1143 Number Game
这里给出了完整的题目描述和解题方法,赞之,以下内容为部分它的内容加上自己的理解。 题目大意:Christine和Matt玩一个游戏.游戏的规则如下:一开始有一列数字(2~20),有的被列出,有的没有列出.从Christine开始,两人轮流划去一个已被列出的数字.每划去一个数字,其他的所有的能被不在这个数列的数字的两两整线性表示的数也自动从数列中退出.到最后,轮到某人而此时数列中没有元素时,这个人就输了. 规定:winning move能将对手置于losing position的决策;而losing原创 2010-08-09 17:27:00 · 2738 阅读 · 0 评论 -
POJ 1125 Stockbroker Grapevine (求两点间最短路径)
由于Floyd-Warshall算法采用了DP,所以这道题被大家一致归类为DP的问题。 这里题目的翻译。需要注意的是输入,如: 3 2 2 4 3 5 2 1 2 3 6 2 1 2 2 2 表示3个点的图,接下来每一行的行号代表一个点,如第一行 2 2 4 3 5 表示编号为 1(行号)的点出去有 2(第一个数字)条边,分别为指向2号边且长度为4,指向3号边且长度为5。再如: 5 3 4 4 2 8 5 3 1 5 8 4 1 6 4 10 2 7 5原创 2010-08-08 18:06:00 · 958 阅读 · 0 评论 -
POJ 1088 滑雪
由简单的开始学习DP,参考他人的DP题目列表,于是找最简单的题目做。照我这个年纪,做这种题目会不会很丢人,暂且不管之。 POJ 1088 题目链接 递归的定义的话,从“区域最长的”高度 H 点往下滑,滑到上下左右的某一个 H-1 点处,则 H-1 位置处也是上下左右4个点中 “区域最长的”点。 原因很简单:如果 H-1 处不是“区域最长的”点,那么可以从上下左右4个点中另外取1个“区域最长的”点作为滑下的点,加上 H 点区域会变得更长。与之前 H 点上“区域最长的”点矛盾。 则递归表达式大致是:原创 2010-08-05 16:44:00 · 895 阅读 · 0 评论 -
POJ 1083 Moving Tables
这个题目可能过于水了。也记记吧。题目链接 题目大意:老板要布置400个房间,要搬桌子,房间的分布如下: 要从一个房间搬到另一个房间,走廊里面只能一次搬一张桌子,当占用某部分走廊时候,其他要过这个走廊的桌子就不能搬。每搬一张桌子花费10分钟,然后给一堆数据,最短花费多长时间。 假设从1->399(或者2->400)的走廊是一条线段,每搬一张桌子(如从30号房间搬到40号房间),则线段30->40被重复了一次。如果另外再搬一张桌子(如从35号房间搬到45号房间),则线段35->45被重复了一次。而相原创 2010-08-06 14:13:00 · 720 阅读 · 1 评论 -
POJ 1050 To the max 最大子矩阵
题目大意:给定一个N阶方阵(10) endB += arr[i]; else endB = arr[i]; if (sum 2: using namespace std; 3: const int MIN_INT = -(10) endB += arr[i]; 11: else endB = arr原创 2010-08-06 12:30:00 · 605 阅读 · 0 评论 -
POJ 1414 Life Line (DP & DFS)
原题链接。大意:1~9个玩家,很多块石头,一个等边三角形构成一张网状的图。每个顶点的数字代表玩家编号,0为空,求轮到玩家C时候可以的最大得分。其中分数的计算规则如下: 玩家可以把自己的编号放在标号为0的顶点处(很多个编号为0的顶点,任意其一,假设为M点),从而使图中所有顶点分成很多组,每一组是相邻并且数字相同的顶点构成,之后可以去掉不与0相邻的组。去掉一个非玩家自己编号的顶点+1分,去掉玩家本身编号顶点-1分。之后就是玩家放置在这个M顶点处的最终得分。 我的思路:图的规模不是很大,邻接矩阵存储,枚举每一原创 2010-08-19 13:15:00 · 1697 阅读 · 0 评论
分享