算法竞赛入门经典 (第二版) 第九章 动态规划初步
wcr1996
个人博客:wcr1996.com
展开
-
UVa 10285 - Longest Run on a Snowboard(记忆化搜索)
昨天整理了博客目录,看紫书第九章还没有做的题,就翻书看到了这道水题。 给出r*c的数表代表每个地点的高度,滑雪时高度要严格降低,求最长滑雪路径。 记忆化搜索最长路径,将每个点的最长路径存在数组g中,算完一个点比较维护最长路径就好了。原创 2015-02-01 00:37:09 · 1618 阅读 · 0 评论 -
UVa 242 - Stamps and Envelope Size(DP)
给出一个s,然后给出n组邮票,问那一组可以凑出最大连续邮资。 对每一组邮票,求出当邮资为i时需要邮票数的最小值d[i],边界为d[0]=0、d[i]>s时break。类似于背包问题的求法,具体方法见代码。原创 2015-08-29 18:10:46 · 1987 阅读 · 0 评论 -
UVa 11400 - Lighting System Design(DP)
给出n种灯泡,同时给出他们的电压v、电源价格k、灯泡单价c和需求数量l。电压低的灯泡可以被电压高的代替,问最小花费。 按照电压从低到高排序,状态d[i]表示前i种的最小花费,转移方程为d[i]=min(d[i],d[j]+(s[i]-s[j])*a[i].c+a[i].k),其中s[i]表示前i种灯泡所需数量和。原创 2015-07-25 13:34:34 · 1287 阅读 · 0 评论 -
UVa 10271 - Chopsticks(DP)
给出n只筷子,找出k+8组,每组三根,输出每组最短两根长度差的平方和的最小值。 倒序读入,对每个可以选的点位有两种转移状态。 DP数组滚动使用,节约空间和初始化时间。 状态转移方程:d[i][j]=min(d[i-1][j],d[i-2][j-1]+(a[i]-a[i-1])^2)原创 2015-07-26 17:35:41 · 1345 阅读 · 0 评论 -
UVa 10723 - Cyborg Genes(LCS)
给出两个序列,要求合并后的序列的子序列包含所给序列,为合并后序列的最短长度和有几种合并方式可以合并出最短序列。类似于求公共子序列的方法,具体转移方程见代码。原创 2015-07-27 16:58:56 · 1390 阅读 · 0 评论 -
UVa 1629 - Cake slicing(记忆化搜索)
对每块蛋糕进行统计,若有1颗就直接返回1,2颗或以上就继续切,没有则不可行。然后继续切的话枚举每一个可以切的方法,记忆化搜索。原创 2015-07-27 17:04:38 · 1594 阅读 · 0 评论 -
UVa 1220 - Party at Hali-Bula(最大独立集)
d[u][1]和d[u][0]分别表示选结点u和不选结点u在它的子树中最大的数目,f[u][t]表示相应选法的唯一性。 d[u][1]=sum{d[v][0]},d[u][0]=sum{max(d[v][0],d[v][1])}。 当选择结点的子树的方案有不唯一时,该结点方案不唯一。原创 2015-07-26 16:23:39 · 1326 阅读 · 0 评论 -
UVa 12186 - Another Crisis(树形DP)
书上给出了思路和DP部分的代码,其他的就很简单了。原创 2015-07-26 16:16:02 · 1476 阅读 · 0 评论 -
UVa 11584 - Partitioning by Palindromes(DP)
给出一个字符串,判断他最少划分成几个回文串。 枚举字符串终点,转移方程为d[i]=min(d[i],d[j−1]+1)d[i]=min(d[i],d[j-1]+1)。原创 2015-07-25 13:41:28 · 1394 阅读 · 0 评论 -
UVa 10003 - Cutting Sticks(区间DP+记忆化)
给出一个木棒和m个切点,每次切割需要花费等于当前木棒长度的费用。问最小花费。 对整个区间DP然后枚举区间的所有间断点。 转移方程为d[i][j]=min(d[i][k]+d[k][j])。原创 2015-07-25 14:10:57 · 1360 阅读 · 0 评论 -
UVa 1347 - Tour(动态规划)
按照横坐标递增的顺序给出1≤n≤1000个点的坐标,求从左边走到右边再走回来,除了两端的点每个点恰好经过一次的走法的距离和。 书上给出了详细的思路,把问题抽象成两个人从一端走到另一端最短距离和。 状态转移方程为:d(i,j)=min(d(i+1,i)+dist(i+1,j),d(i+1,j)+dist(i+1,i)) 边界为:d(n-1,j)=d(n,i)+d(n,j)原创 2015-03-29 22:27:52 · 1476 阅读 · 0 评论 -
UVa 12563 - Jin Ge Jin Qu hao(01背包)
给出剩余时间和想唱的歌,求最多能唱几首和最长时间。 较为简单的01背包问题,在算数目的时候顺便计算时间就好。原创 2015-03-09 18:36:10 · 1419 阅读 · 0 评论 -
UVa 10118 - Free Candies(记忆化搜索)
给出4堆糖,往容量为5篮子里装任意一个在堆顶的糖,篮子里有相同颜色的就拿走,问最多能拿走几次。 定义四维数组记忆搜索。原创 2015-03-09 17:08:13 · 1409 阅读 · 0 评论 -
UVa 437 - The Tower of Babylon(DAG动态规划)
给出一些长方体,求能叠成的最高的顶面长和宽严格递减的塔有多高。 几乎和嵌套矩形的一样,储存每个长方体的面,然后dp搜索。原创 2015-03-09 17:52:13 · 1401 阅读 · 0 评论 -
UVa 1025 - A Spy in the Metro(动态规划)
一个间谍要从第1个车站到第n个车站在T时刻与人接头。她可以灵活地在车站在各列车上穿梭,求在车站等待的最短时间。 书上给出了思路和主程序代码,剩下的就是输入了,用has_train存每个时刻每个车站的状态。每读入一辆车,就模拟至目标时间,储存它经过的站点。原创 2015-03-03 23:09:39 · 1568 阅读 · 0 评论 -
UVa 11040 - Add bricks in the wall(规律)
给出墙上的部分数字,求所有的数字。 简单题,直接算就行。原创 2015-02-18 15:06:39 · 1446 阅读 · 0 评论 -
UVa 10934 - Dropping water balloons(DP)
给出n个相同的气球,k层楼,问最少几次试验可以知道气球最高从多少层扔下不会爆。 用d[i][j]表示用i个球,实验j次所能确定的最高楼层数,对于每一次试验分爆和不爆两种情况讨论: 1、爆了,转移到d[i-1][j-1]+1,用掉了1个球和一次试验机会。 2、没爆,将当前测试层数的上一层当做第1层继续进行试验,转移到d[i][j-1]。 得出转移方程d[i][j]=d[i-1][j-1]+1+d[i][j-1]。原创 2015-08-29 18:01:41 · 1421 阅读 · 0 评论