- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划总结-Read.doc
动态规划总结
专题一 状态表示
在用动态规划解题时,我么往往第一个考虑的是数组维数,其实数组维度(和状态表示)是有规律可循的:
二维空间的DP:
一般采用二位数组——d[i,j]表示当i,j为某一边角时的极值(e:d[i,j]可以表示以i,j为右上角时所能构成的正方形的边长最大值——听不懂?接着往下看)。
还有一种表示方法:d[i,num]表示走到第i各阶段的第num个位置:
1,1 2,2 3,3 4,4 5,5 6,6 2,1 3,2 4,3 5,4 6,5 7,5 3,1 4,2 5,3 6,4 7,4 8,4 4,1 5,2 6,3 7,3 8,3 9,3 5,1 6,2 7,2 8,2 9,2 10,2 6,1 7,1 8,1 9,1 10,1 11,1 这种表示解决“多次访问同一图”类的DP题很有用。
阶段决策类的DP:
这里指阶段划分十分明显的题(0/1背包)。
一般采用d[i,j]表示执行到第i各阶段,剩余代价为j时,所能取得的最高分。(如果限制条件多,可增加维度)。
树形关系类的DP:
一般用d[i]来表示以i为根节点的最优值,可以加维来保证正确性。
线性关系类的DP:
这一类的DP最简单,是每一个OIER的必备基础,在这里就不废话了。
专题二 状态转移
(专题二与专题一的分类标准不同,因为dugushuiyi说这样分更好,感谢他)
线性转移
一般公式:d[i]= operation(d[j]+w[j,i])(w[i]为由j转移到i的消耗){operation为求最值}
阶段性转移
一般公式:
d[i,j]:= operation(d[i-1,k]+w[k,j],d[i-2,……)
如果只涉及到前面的有限个阶段,可以使用滚动数组。
D[I mod n,j]= operation(d[(i-1)mod n,k]+w[k,j],d[(i-2)mod n,……)
树性转移
一般公式:
D[i,j]=max(d[lson[i],k1]+w[j,k1],d[rson[i],k2]+w[j,k2])
遍历顺序一般为后序遍历顺序。
多维空间转移
一般公式:
d[i,j]:=max(d[i-1,j]+w1,d[i,j-1]+w2)
复杂度分析:
DP的复杂度为:
状态表示的数组维数*状态转移的代价
So A 的复杂度为O(n^2)
BCD:O(n^3);
专题三 题目分类总结
一般类试题
题库:
最长不下降子序列
最长匹配前缀
邮票组合
共性总结:
题目一般可以通过for 语句来枚举状态,所以时间复杂度为O(N^2)
本类的状态是基础的基础,大部分的动态规划都要用到它,成为一个维。
一般来说,有两种编号的状态:
状态(i)表示前i个元素决策组成的一个状态。
状态(i)表示用到了第i个元素,和其他在1到i-1间的元素,决策组成有的一个状态。
01背包:(重点)★★★
题库:
01背包(USACO、vijos1025、1104)
装箱问题(NOIP01 Trade 4)、
取火柴问题(sgu153 Playing with matches)
共性总结:
一般都从阶段的角度来表示状态
因为d[i,j]只与d[i-1,k]有关,所以可以用滚动数组来实现。D[odd(i),j]
各例分析:
采药(NOIP2006、vijos)
一个背包,每个物品只能放一次。
(1)D[i,j]:=max(d[i,j],d[i,j-t[i]]+p[i]);
D[I,j]表示决策了前i个物品,花费了j的代价
优化:滚动数组.
(2)D[odd(i),j]:=max(d[i-1,j],d[odd(i-1),j-t[i]]+p[i]);
观察(2)不难发现,当我们算到j时,1(j-1并没有更新,而d[i-1,j-t[i]]一定在1(j-1的范围内,所以完全可以用一位数组,方程为:d[i]:=max(d[i],d[i-t[j]]+p[j])
在最外层循环一下j就ok了。(精益求精)
总分(USACO)
一个背包,可以重复放物品。
D[i]:=max(d[i],d[i-t[j]]+p[j])
D[i]表示花费i各单位时间所能达到的最大值。(较简单)
Raucous Rockers(USACO)
多个背包,不可以重复放物品,但放物品的顺序有限制。
d[I,j,k]:=max(d[I-1,j,k],d[I-1,j,k-t[i]]+p[i],d[i-1,j-1,maxtime-t[i]])
d[I,j,k]表示决策到第i个物品、第j个背包,此背包花费了k的空间。d[I-1,j,k]表示不取i,d[I-1,j,k-t[i]]表示取了i病房入背包j中,d[i-1,j-1,maxtime-t[i]]
您可能关注的文档
最近下载
- 2022年教师资格之中学体育学科知识与教学能力模拟试题含答案.docx VIP
- iatf16949考试试题及答案.docx VIP
- 《深冷空分装置操作与安全标准手册》.docx VIP
- 新版典范英语7-2Noisy-Neighbours原文及翻译.pdf VIP
- 某酒店月度经营分析会PPT(共 185张).ppt VIP
- 机械租赁服务方案(3).docx VIP
- gb1231-2016螺栓扭矩标准.pdf VIP
- 陆上风电场工程设计概算编制规定及费用标准(2019).docx VIP
- {安全管理制度}空分安全操作规程.pdf VIP
- 2025年浙江省高考英语试卷(含答案解析)+听力音频+听力原文.docx
文档评论(0)