![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
紫书第九章动态规划
第九章DP
carut
这个作者很懒,什么都没留下…
展开
-
刷表法 和 填表法(DP)
刷表法 和 填表法在dp问题中,当我们写出了状态转移方程的时候,一般可以直接去迭代求解。但是,与此同时有一个问题:例如 状态转移方程 是dp[i][j]=F{dp[i-1][j-1],dp[i-1][j],dp[i-1][j-1]} 这样的形态时,如何进行枚举呢?是枚举dp[i][j],由dp[i-1][j-1],dp[i-1][j],dp[i-1][j-1]更新dp[i][j],抑或是枚举dp[i-1][j-1],去更新dp[i+1][j+1],dp[i+1][j],dp[i][j+1]。填表法:可原创 2021-11-12 00:58:21 · 1939 阅读 · 0 评论 -
UVA - 1322 Minimizing Maximizer 线段树
问题分析线段树,单点更新,区间查询原创 2020-02-05 17:34:10 · 144 阅读 · 0 评论 -
UVA - 1579 Matryoshka (区间DP+多个DP)
问题分析对于不同大小的套娃的数量进行统计,一定是非严格递减的,否则无解同一套套娃的位置一定要是相邻的,否则无解可以计算一共有多少套套娃状态:dp[i][j]把前i个合成 j套 套娃至少需要多少次操作...原创 2020-02-04 16:27:43 · 145 阅读 · 0 评论 -
UVA - 1371 Period (二分+dp)
问题分析使用二分法定界,然后使用对于不同的mid使用dp进行编辑距离的计算还有分段,对于do[i][m]<=mid,就可以进行分段(贪心想法)#include<iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>...原创 2020-02-03 20:38:49 · 339 阅读 · 0 评论 -
UVA - 12222 Mountain Road
问题一条山路,单行道,双向来车,通向的车之间的距离(通过同一个点)要保持10s以上,问所有车通行的最短时间(车子在到达路的一端后可以等待任意时间,再行驶)分析分为两个方向单独考虑,dp[i][j][0/1]分别代表A向行驶完i辆,B向行驶完j辆,最后一辆车时A向/B向的车时所花费的最短时间只有行驶的汽车方向变向,才发生状态转移#include<iostream>#inclu...原创 2020-02-03 17:48:53 · 255 阅读 · 3 评论 -
UVA - 1443 Garlands (二分+dp)
问题分析使用二分法判断边界必须按照输入的顺序将pieces连接起来,不能交换顺序,所以输入样例6 3 101 1 100 100 1 1结果是200。然后就能编程线性DP ,dp[i]表示前i个pieces最少可以分成多少个segment,用贪心的方法求解,但是这对于样例无法通过(没有考虑到m的值,必须构成m-1个片段 ),并不是segment越多,对应的最终半段重量越小所以要分为...原创 2020-02-03 01:49:09 · 213 阅读 · 2 评论 -
UVA - 1379 Pitcher Rotation (dp+贪心)
问题分析这道题没什么思路原创 2020-02-02 17:11:31 · 172 阅读 · 0 评论 -
UVA - 10271 Chopsticks 线性DP
问题在N个数字中挑选K组,每组3个数字,A<=B<=C,要求∑i(Ai−Bi)2\sum_i(A_i-B_i)^2∑i(Ai−Bi)2最小分析#include<iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorit...原创 2020-02-01 21:16:28 · 99 阅读 · 0 评论 -
UVA - 1634 The Picnic (dp+几何)
问题m个点,选出若干个,形成凸多边形,使得内部没有点(边界上可以有)。输入点的坐标各不相同,且至少有三个点不共线分析这题看上去没什么思路,但有一些问题值得思考。两个问题,如何确保是一个凸多边形? 如何确保无后效性?遍历点i,把i作为凸多边形的左下角的点,然后将i右上方的点存入数组dis:计算距离cmp使得点按照**逆时针(别看反了)**排列,a,b,O三点共线按照距离从小到大排列...原创 2020-02-01 18:16:00 · 337 阅读 · 0 评论 -
UVA - 12589 Learning Vector (01背包)
问题n个向量,选择k个,连成一条折线,使得折线和x轴之间的面积最大分析开始想的是状压dp,发现n太大了,换种思路这道题是01背包的变形,只不过多了一个高度,新增加的一个向量带来的权重和尾部高度H,向量所在矩形大小W有关,所以需要多记录一个维度,记录上个状态的尾部高度(得到最优解要排序,按照向量的斜率从大到小排序,按照顺序选择,计算才是最优解,因为两个向量,先后不同,结果也不同,例如A:(...原创 2020-01-31 21:32:16 · 115 阅读 · 0 评论 -
UVA - 1543 Telescope (区间dp)
问题单位圆上有n个点,在其中选择m个,使得连成的凸多边形面积最大,输出面积分析区间dp,我的想法是dp[k][i][j]是区间(i,j)中选择k的点,区间两端的点不计入k中,用dp[k][i][j]表示选择点后裁下来的弓形大小,对应角度大小α(0<=α<=2π))\alpha(0<=\alpha<=2\pi))α(0<=α<=2π))的弓形面积是0.5∗(...原创 2020-01-31 16:20:39 · 168 阅读 · 0 评论 -
UVA - 1289 Stacking Plates (分析+离散化)
问题分析分析参照:https://blog.csdn.net/BUAA_Alchemist/article/details/86932466(大佬的分析,条例十分清晰)代码参照:https://blog.csdn.net/hao_zong_yin/article/details/79807322自己的理解: 首先先将堆分开,期间不合并,之后只和合并,不分开,开始有n个堆,分开后最多有m个堆...原创 2020-01-31 00:43:45 · 505 阅读 · 0 评论 -
UVA - 12093 Protecting Zonk 树状DP
问题问题就是在一个无根树上,每个点可以放置一个机械,机械有两种C1,C2,C1可以覆盖放置点直接连接的边,C2可以覆盖放置点和相邻点所连接的边,他们的费用不同,问怎么放的代价最小分析开始的思路:这题是树状DP, 如果直接将点u放置的机械种类作为状态,dp[u][0,1,2]分别代表点u不放置,放C1,放C2,的不同状态,1作为DFS开始的节点,会有一些问题(主要是两个),无法解决1-2-3...原创 2020-01-29 20:17:47 · 85 阅读 · 0 评论 -
UVA - 1633 Dyslexic Gollum 状态压缩
问题输入N,K(N<=400,K<=10),求长度为N且不含有长度至少为K的连续回文子串的01字符串有多少个?分析这道题乍一看上去感觉简单,但细想原创 2020-01-28 20:57:27 · 234 阅读 · 0 评论 -
UVA - 10641 Barisal Stadium (DP + 几何)
问题平面上,n(n<=30)条边凸多边形,外部有m(m<=1000)个光源,光源可以照亮一些边,每个光源有坐标和费用,求照亮整个凸多边形所有边的最小光源费用分析向量叉乘:如何判断两个向量之间夹角是顺时针还是逆时针?利用平面向量的叉乘,a,b是平面向量,a = (x1,y1) b = (x2,y2)a×b = x1y2 - x2y1,若结果为正,则向量b在a的逆时针方向...原创 2020-01-27 17:35:40 · 470 阅读 · 0 评论 -
UVA - 10163 Storage Keepers 多重背包
问题仓库守卫,一共有N个仓库,有M人应聘首位,每个仓库最多一个守卫,一个守卫可以看管多个仓库,守卫i的能力值是PiP_iPi,薪资等于能力值,仓库的安全系数L等于Pi/KP_i/KPi/K的整数部分,KKK是守卫iii看守的仓库数量求最小安全系数的最大值,和此前提下的最小能力值总和分析和多重背包思路有点相似分开计算,首先求最大最小安全系数 L,再求最小的能力值总和YL(i,j)代表...原创 2020-01-26 20:05:37 · 151 阅读 · 0 评论 -
UVA - 1632 Alibaba 记忆化搜索
问题一条坐标轴,alibaba可以选择任一点作为出发点,直线上一共有N个点,按照顺序输入,每个点有自己的坐标和时间,超过时间会消失,问经过所有点的最短时间是多少,无法办到的话输出No solution分析这题和前面的修理长城比较相似,把时间作为状态对应的值,状态是 dp[i][j][p]代表经过[i,j]所有点后停留在p(p代表左端还是右端)所需要的最小时间注意: 等于算超时#inclu...原创 2020-01-25 17:03:17 · 101 阅读 · 0 评论 -
UVA - 1631 Locker 记忆化搜索
问题分析原创 2020-01-25 15:22:34 · 109 阅读 · 0 评论 -
UVA - 10723 Cyborg Genes(LCS 最长公共子序列)
问题两个由A-Z字母组成的长度不超过30个字符的字符串A,B,找一个最短的串C,使得A,B是它的子序列(不一定连续出现),输出最短的长度和个数分析这题求最短长度很简单,就是用两个的长度之和减去LCS的长度:len(A)+len(B)-LCSLCS的状态转移方程: lcs(i,j)代表A(i)和B(j)这两个子串的最大公共序列长度,num[i][j]是对应的最短字符串的个数当A[i]==B...原创 2020-01-24 21:14:13 · 151 阅读 · 1 评论 -
UVA - 242 Stamps and Envelope Size --完全背包问题
问题分析完全背包问题,邮票无限张,每张的weight都是1,最大的载重是S,体积是面值,最快**O(VN)**的算法使用一维数组,先看伪代码:for i=1..N for v=0..V f[v]=max{f[v],f[v-cost]+weight转移方程: f[i][v]=max(f[i−1][v],f[i][v−c[i]]+w[i]])f[i][v]...原创 2020-01-23 23:02:26 · 166 阅读 · 0 评论 -
UVA - 1630 Folding 递归记忆化搜索
问题问题就是折叠字符串,例如ACBACB可以折叠成2(ACB),并且折叠可以嵌套,字符串长度是n(1<n<=100),求最短的折叠分析状态比较易懂,dp[i][j]代表[i,j]这一段能压缩成的最短字符串然后分为三种情况决策,1.不能压缩的 2.能部分压缩的(就是分开后再压缩) 3.整体能压缩的#include <iostream>#include <cs...原创 2020-01-23 18:04:42 · 139 阅读 · 0 评论 -
UVA - 1629 Cake slicing 递归记忆化搜索
问题分析这题还是比较明显的,状态就是网格,dp[r1][r2][c1]][c2]表示行坐标[r1,r2],列坐标[c1,c2]间的的网格蛋糕的最小切割长度状态转移方程:按照行来切: dp[r1][r2][c1][c2]=min((c2−c1+1)+dp[r1][i][c1][c2]+dp[i+1][r2][c1][c2])(r1<=i<r2)dp[r1][r2][c1][c2]...原创 2020-01-22 22:15:46 · 134 阅读 · 0 评论 -
UVA - 10118 Free Candies 递归记忆化搜索
问题问题是给四个糖果堆(高度为n,n<=40),每次可以从任意一个堆的顶部取一个糖果放在容量为5的篮子中,若篮子中有两个颜色相同,就可以拿走,求最多可以拿走多少个糖果对分析状态是dp[a][b][c][d],a,b,c,d分别是从四个堆中拿走的的糖果个数,dp[0][0][0][0]是还没取的时候,可以得到的最多糖果对数量,dp[a][b][c][d]是已经取了a,b,c,d的时候还能...原创 2020-01-22 18:49:53 · 229 阅读 · 0 评论 -
UVA - 10285 Longest Run on a Snowboard --DAG最长路
问题给一个m*n(m,n<=100)矩阵,要求找到矩阵中的最长递减路径长度(从一个元素出发,可以往四个方向走,但是数字的值必须减少)分析DAG(有向无环图)最长路问题填表法,记忆化搜索#include <iostream>#include <cstdio>#include <vector>#include <cstring>#...原创 2020-01-22 16:38:44 · 113 阅读 · 1 评论 -
UVA - 1628 Pizza Delivery (深入分析问题)
问题分析这道题和之前的修缮长城有点相似区别是范围时间损失被简化了,但是可以选择一些顾客不送,也就是跳过他们,这就引入了一个问题,那就是没办法将损失累积到一个顾客上面(因为不知道到底要服务多少个顾客),然后将时间归0,所以在dp[i][j][2]的基础上增加一个维度,用来表示服务的顾客数量(有一些顾客被放弃了),然后我们就可以按照修缮长城的做法了dp[i][j][k][pos] 已经处理了[...原创 2020-01-21 23:57:59 · 167 阅读 · 0 评论 -
UVA - 1375 The Best Name for Your Baby (有’环‘的动态规划)
问题原创 2020-01-21 19:28:11 · 293 阅读 · 0 评论 -
UVA - 1228 Integer Transmission --动态规划 组合数学(递推)
问题分析这题看上去很复杂,但紫书上的思路很清晰,按照上面的思路写就比较简单了首先是问题,这个问题是bit传输中会有[1-d+1]的延时,扰乱顺序,其中0,1数量不变,所以可以规定所有的0看作按照原顺序收到的,把所有的1看作按照原顺序收到的,这规定就把问题变为了两串数字0,1交替插值,0,1的序号之差要在d之内,所以我们可以用贪心法求解最大和最小值假设原来1-n比特数字,传输后变为[1,n+...原创 2020-01-20 19:36:16 · 220 阅读 · 0 评论 -
UVA - 1439 Exclusive Access 2(转化为图论模型)
题目这题题目比较复杂,我就简述一下,系统中有n(1<=n<=100)(1<=n<=100)(1<=n<=100)个进程和由L-Z大写字母表示的资源,资源不接受并发访问,每个进程同时需要两个资源,由此可以构建等待链(等待链定义见原题),问如何安排每个进程的资源获取顺序,使得最长的等待链最小分析这题重要的是建模,把原问题转化为图模型,每个资源变为一个点,每个进...原创 2020-01-18 23:05:09 · 319 阅读 · 0 评论 -
UVA - 10559 Blocks 给状态增加一个维度
题目n个不同颜色的方块排成一行,每次消去一段长度为x的连续相同颜色方块(这一段是指直到这种颜色的边界为止),可以得到x2x^2x2积分,问最多可以得到多少积分分析这一题是区间动态规划,但是截然不同的是,如果按照dp[i,j]从i到j连续的一段来表示状态,那么无法表示XAXBXCX这种的最优解,因为它是消除了内部的分段A,B,C之后,还要把剩下的重新拼起来,而以前见到的都只有划分,没有重新拼接...原创 2020-01-17 17:48:09 · 152 阅读 · 0 评论 -
UVA - 1380 A Scheduling Problem --树形dp
问题给定一些任务,任务之间存在着一些约束关系,分为两类,冲突约束和先后约束,存在冲突约束的两个任务不能再同一天执行,先后约束的两个任务x和y,必须执行完x,才能执行y,每个任务都需要一天的时间才能完成所以,可以构建出一棵树,一个由任务作为节点,任务之间的约束条件作为边连接成的树,冲突约束可以做为无向边,先后约束作为有向边,求至少需要多少天能够完成所有工作定理: 删去无向边后存在的最长链长度是...原创 2020-01-16 18:25:12 · 210 阅读 · 0 评论 -
UVA - 12170 Easy Climb 单调队列优化动态规划
问题给定正整数d(0<=d<=1e9)(0<=d<=1e^9)(0<=d<=1e9)和n(2<=n<=100)(2<=n<=100)(2<=n<=100)个正整数h1,h2,⋅⋅⋅hn(0<=hi<=1e9)h_1,h_2,···h_n(0<=h_i<=1e^9)h1,h2,⋅⋅⋅hn(0<...原创 2020-01-14 23:38:12 · 156 阅读 · 0 评论 -
UVA - 12099 The Bookcase --类似于0-1背包的状态优化
问题参加链接,有n本书,(3<=n<=70)(3<=n<=70)(3<=n<=70),每本书有高度HiH_iHi,厚度WiW_iWi,其中150<=Hi<=300150<=H_i<=300150<=Hi<=300,5<=Wi<=305<=W_i<=305<=Wi<=30,每本书任意...原创 2020-01-13 20:25:27 · 190 阅读 · 1 评论 -
UVA - 1204 Fun Game状压dp
题目一个环,给定n(n<=16)个字符串,都是环上的字串,求原始的环最小是多长分析这道题感觉挺麻烦的,关键是给定字符串的顺序可以是顺时针的,也可以是逆时针,然后还要确定起始位置,最后连成环的时候(就是首尾相接时),如何保证环是最小的开始时我理解错了,认为给了BGGB BGG拼的是出来的BGG 而不是BGGBGG,读了代码后确定了所有的字符串都是环的子串,不存哎循环的可能首先预处理,...原创 2020-01-13 12:53:33 · 132 阅读 · 0 评论 -
UVA - 12105 Bigger is Better
题目分析1.dp[i][j]要用到高精度整数计算原创 2020-01-12 01:27:21 · 230 阅读 · 0 评论 -
UVA - 1336 Fixing the Great Wall
问题机器人修补长城,给三个整数,n代表缺口(缺口看作点),v(机器人行动速度),x(机器人现在所在位置),x不和任何缺损点重合,对于n个点,每个点有3个整数,x代表缺损点位置,c代表修补代价,delta代表随时间增加的代价,总代价是c+delta*t输入三个整数,n,v,x,后面n组点的参数,x,c,delta,最小花费不大于1e91e^91e9输出修补花费,截断输出整数思路修复的点...原创 2020-01-09 18:03:08 · 138 阅读 · 0 评论 -
UVA - 10934 Dropping water balloons
UVA - 10934 Dropping water balloons题目有k(1<=k<=1001<=k<=1001<=k<=100)个气球,从楼上往下扔,气球超过一个楼层高度就破损,在那之下不破损,扔下去不造成损耗,现在楼层高度n,n是64个bit位能表示出的整数,最少需要扔多少次才能确定气球破裂高度输入气球数量k (1<=k<=100)...原创 2020-01-09 11:27:21 · 80 阅读 · 0 评论 -
UVA - 1627 Team them up!
UVA - 1627 Team them up! 二分图+背包(选择最靠近0的方案)原创 2020-01-08 23:08:22 · 205 阅读 · 0 评论