- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
状态表示状态转(进阶篇)
衢州一中 胡承丰
第 PAGE 5 页 共 NUMPAGES 9 页
动态规划总结
专题一 状态表示
在用动态规划解题时,我么往往第一个考虑的是数组维数,其实数组维度(和状态表示)是有规律可循的:
二维空间的DP:
一般采用二位数组——d[i,j]表示当i,j为某一边角时的极值(e:d[i,j]可以表示以i,j为右上角时所能构成的正方形的边长最大值——听不懂?接着往下看)。
还有一种表示方法:d[i,num]表示走到第i各阶段的第num个位置:
1 2 3 4 5 6
1 2 3 4 5 6
12
1
2
3
4
5
6
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
您可能关注的文档
最近下载
- 沪科版九年级上册数学二次函数中的最值问题考点题型专项突破练习(含详解).docx VIP
- 2023年第一次广东省普通高中学业水平合格性考试政治参考答案.docx
- 2024-2025学年湖南省长沙市长郡中学高一(上)月考数学试卷(10月份)(含答案).pdf VIP
- 钢网架顶升施工方案.docx VIP
- 2025年表现代农业产业园建设绩效评价指标表.pdf VIP
- 城市电力电缆设计技术规定讲解.pptx VIP
- SUZUKI铃木UU125T摩托车维修手册.pdf VIP
- 2017年10月自考02205微型计算机原理与接口技术试卷及答案解释.doc VIP
- 网架顶升施工方案.pdf VIP
- 苏教版五年级数学上册第二单元测试卷及答案(完美打印版).doc VIP
文档评论(0)