动态规划
文章平均质量分 73
提交WA的_请自己跑下看看输出有没问题
这个作者很懒,什么都没留下…
展开
-
POJ 1742 多重背包
与POJ 1014都是多重背包,只是这题数据大,需要优化原创 2010-10-09 15:22:00 · 538 阅读 · 0 评论 -
hdu 2415 Bribing FIPA
树形DP,不同的是,只要选择一个根节点i,它的子树中的所有节点也被选择,代价为cost[i]由于dfs时,先遍历子树,再返回根节点,这样,以i为根的子树中的节点可能被多次利用,解决办法就是访问到i时,先开一个tmp数组当前的状态,即dp值,然后访问子树,返回时,先更新tmp值,再原创 2011-07-13 16:22:34 · 1121 阅读 · 0 评论 -
hdu 1561 The more,The better
树形依赖背包,用多叉转换成二叉的形式解决一个节点两个孩子,左孩子是它的孩子中的第一个,右孩子是它的第一个右兄弟,这样一直递归下去,所以只有左孩子是节点的真正孩子dp[i][j]=max{dp[r[i]][j], dp[l[i][k]] + dp[r[i]][j-1-k] +w[i原创 2011-07-13 16:27:01 · 666 阅读 · 0 评论 -
hdu 3449 Consumer
每组物品加入了箱子的限制,如果要买改组物品,就必须先买箱子考虑第i组物品时,前i-1组的最优值已经知道,假设总容量为V,改组的箱子的代价为p,那么如果我们要买该组物品,可用容量就只有V-p,所以,我们先用tmp数组记录前i-1阶段容量范围在[p,V]这个范围内的最优值,然后在这个原创 2011-07-13 16:32:37 · 1229 阅读 · 1 评论 -
POJ 3093 Margaritas on the River Walk
给n个物品,容量为V的包,要求这样的方案数:选中k个物品放入背包后,剩下的物品中,任意一个都放不进去考虑什么情况下一个都放不进去,就是剩下物品中体积最小的那个(体积为v)都放不进去,即背包装载容量应为[V-v+1,V]那么我们可以将物品按容量排序,从小到大枚举不放入背包的体积最小原创 2011-07-15 09:44:29 · 935 阅读 · 1 评论 -
POJ 3260 The Fewest Coin
FJ要买价值为V的东西,他又N种货币,第i种的币值为Vi,数量为Ai,老板每种货币都有无数个,求最少需要多少张货币完成交易(FJ付出的加上老板找零用的)先计算FJ付x元最少要几张货币(多重背包),然后计算找y元最少需要几张货币(完全背包),然后枚举x-y=V对应的最小值x和y的上原创 2011-07-16 19:29:29 · 642 阅读 · 0 评论 -
poj 1351 Number of locks
dp[i][j][k][s]表示当前到第i把锁,高度为j,是否出现高度差为3(k=1表示出现过,0表示没有出现过),使用高度的种数为s的方案数类似于按位DP的思想,记忆化求解dfs的时候枚举第i+1位选择的高度,并和当前s状态比较,记录出现高度的种数代码:#include#in原创 2011-07-28 21:10:20 · 1053 阅读 · 0 评论 -
POJ 1160
令dp[i][j]表示第i个post office在第j的村庄时的最小代价dp[i][j]=min{dp[i-1][k]+cost[k+1][j]},i-1dp[1][i]=cost[1][i]一开始不会预处理cost,枚举k后又枚举位置计算cost,跑了400多ms原创 2011-07-31 13:03:44 · 649 阅读 · 0 评论 -
POJ 1946 Cow Cycling
定义dp[i][j][k]表示第i头牛领头,此时消耗j点能量,走了k圈的最少时间如果此时更换领头的牛,dp[i][k][k]=min{dp[i-1][j][k],dp[i][k][k]}否则,dp[i][j][k]=min{dp[i][j][k],dp[i][j-sqr(原创 2011-07-31 16:55:55 · 584 阅读 · 0 评论 -
hdu 3415 Max Sum of Max-K-sub-sequence
要求一段连续区间和,可以用sum[i]-sum[j]来求,但要求一段长度不大于k的区间和的最大值,我们可以固定i,然后求sum[i]-min{sum[j]},1我们用单调队列来维护min{sum[j},每次枚举一个i时,队头元素的下标至少为i-k,然后求完sum[i]-m原创 2011-07-31 19:04:10 · 456 阅读 · 0 评论 -
poj 2373 Diving the Path
dp方程为dp[i]=min{dp[j]}+1,2*a直接搞转移是L^2的,但j是在由i确定的一个范围内的,所以可以用单调队列优化另外,这题比较麻烦的是如果i在某头牛的区间内,i处就不能放喷头,我们需要知道哪些地方不能放置,可以对区间先预处理一下,能合并的就合并,然后用一原创 2011-08-05 16:12:52 · 856 阅读 · 0 评论 -
hdu 2571
简单DP,但需要注意的是起点必须为左上角,所以第一行不能由第0行转移,第一列不能由第0列转移代码:#include#include#include#include#include#include#include#include#include#inclu原创 2011-08-05 12:37:47 · 640 阅读 · 0 评论 -
hdu 2845
先横着扫求出每一行可以得到的最大值然后竖着扫求总共可以得到的最大值,每次考虑该单位选或不选代码:#include#include#include#include#include#include#include#include#include#incl原创 2011-08-05 12:39:11 · 541 阅读 · 0 评论 -
TSP问题
TSP问题最主要的特征,点数一般为16以为,然后每个点只能经过一次,求遍历所有点的最小代价原始的TSP问题是要走一条回路的,即汉密尔顿回路,问题变形的话,可以不回到原点,也可以有多个原点POJ 1699,把每个串看成一个点的话,就是求不指定原点的TSP问题,且不必回到原点原创 2011-09-05 00:21:05 · 10794 阅读 · 1 评论 -
hdu 2639 Bone Collector II
求第k大的背包每个容量v都对应k个不同的价值,当考虑放第i件物品,容量为j时,价值为第k大时,我们要么不放,要么放,那么每个k就对应2个情况,dp[j][k]和dp[j-w[i]][k],总共有2×K种不同价值,那么我们排好序后,取前K大且两两不同的价值,存入dp[j][k]中,原创 2011-07-13 11:12:08 · 908 阅读 · 0 评论 -
hdu 2159 FATE
二维背包,dp[i][j]表示忍耐度为i,且还可以杀j个怪时能获得的最大经验值dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]为杀死第k种怪掉的忍耐度,e[k]为第k种怪的经验值注意方程转移时,我们必须要保证考虑第j个阶段时,我们只原创 2011-07-11 09:56:24 · 566 阅读 · 0 评论 -
POJ 1221 dp
类似于整数分解,但要求分解得到的式子是回文,且前半部分单调非递减,后半部分单调非递增原创 2010-10-08 19:04:00 · 1226 阅读 · 0 评论 -
POJ 1088 滑雪 记忆化搜索
记忆化搜索,排序也可以做!原创 2010-10-09 21:22:00 · 718 阅读 · 0 评论 -
POJ 2033 DP
很快就想出方法的一道DP,但却忽略了一些特殊情况,以后要考虑周全,能够想到tricks原创 2010-10-12 14:22:00 · 658 阅读 · 0 评论 -
1745 Divisibility DP
利用模运算进行DP原创 2010-10-10 22:33:00 · 448 阅读 · 0 评论 -
POJ 1179 Polygon DP
枚举删除的边,然后DP计算最大值原创 2010-10-15 17:29:00 · 424 阅读 · 0 评论 -
POJ 2704 Pascal's Travels
额。。。原创 2010-12-19 19:16:00 · 576 阅读 · 0 评论 -
POJ 1080 Human Gene Functions
LCS问题变形原创 2011-05-09 18:46:00 · 524 阅读 · 0 评论 -
01背包问题小结
01背包问题原创 2011-05-12 21:12:00 · 1397 阅读 · 2 评论 -
POJ 1260 Pearls
一维dp,理解题目限制的意义原创 2011-05-20 12:55:00 · 742 阅读 · 0 评论 -
HDU 3507 Print Artical
斜率优化原创 2011-06-01 00:37:00 · 527 阅读 · 0 评论 -
POJ 2192 Zipper
LCS问题变形原创 2011-05-09 18:52:00 · 464 阅读 · 0 评论 -
POJ 3356 AGCT
LCS问题变形原创 2011-05-09 18:32:00 · 713 阅读 · 0 评论 -
hdu 1024 Max Sum Plus Plus
dp[i][j]表示以第i个数字为第j段的结尾的最大和dp[i][j]=max(dp[i-1][j],dp[k][j-1])+a[i],j-1即要么和第i-1个数连在一起构成第j段,要么自己为新的一段,与之前的j-1段构成j段直接转移是O(n^2*m)的,不过对于dp原创 2011-08-08 10:24:59 · 633 阅读 · 0 评论