- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态规划初步9155223109
动态规划初步
动态规划与分治算法类似,基本思想是将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
两条基本要素:
最优子结构
重叠子问题
设计动态规划算法的步骤:
1、找出最优解的性质,并刻画其结构特征
2、递归的定义最优值
3、以自底向上的方式计算出最优值
4、根据计算最优值时的信息,构造最优解
HDU2084 数塔
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
最长上升子序列(LCS)
一个给定序列的子序列是在该序列中删去若干元素后得到的序列。
若X=A, B, C, B, D, A, B和Y=B, D, C, A, B, A,则序列B, C, A是X和Y的一个公共子序列,序列B, C, B, A也是X和Y的一个公共子序列。而且,后者是X和Y的一个最长公共子序列,因为X和Y没有长度大于4的公共子序列。
LCS[i][j]记录当A到第i个位置,B到第j个位置时,A、B两个数组的最长公共子序列,那么就会有以下两种情况
当A[i]=B[i]时,说明两个位置的值相等
LCS[i][j]=LCS[i-1][j-1]+1
当A[i]!=B[i]时,说明两个位置的值不相等
LCS[i][j]=max(LCS[i-1][j],LCS[i][j-1])
6/info/Data_Structures_and_Algorithms/problems/problem_set/LCS/problem.htm
0-1背包问题
有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。
使用二维数组f[i][j]:
第一维表示的是:
已经选择到了第i个物品
第二维表示的是:
背包总共使用了j单位
f[i][j]记录的是在这个状态下,所能得到的最大收益
对于每种物品来说,只有两种状态:取或者不取
不取: 对于f[i][j]来说,他的值,应当为f[i-1][j]
因为背包的实际没有增大
取: 对于f[i][j]来说,他的值,应当为f[i-1][j-c[i]]+v[i]
因为背包的实际增大了c[i],价值增加了v[i]
从以上的两种情况,考虑f[i][j]可能由多种情况来,那么就取MAX即可,但是由于有i这意味,那么f[i][j]只能由两种状态来,公式为
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
对于不取的情况而言,值已经存在,并且,我们不能保证当背包容量用尽时是最大值,那么我们就应当扫描所有的背包容量情况。
那么此时的时间复杂度为O(VC),空间复杂度也是O(VC),考虑空间复杂度的降低,我们将f[i][j]中的第一维去掉,只留下背包容量这一维
那么此时的时间复杂度为O(VC),空间复杂度也是O(VC),考虑空间复杂度的降低,我们将f[i][j]中的第一维去掉,只留下背包容量这一维
for i=1..N
for v=V..0
f[v]=max{f[v],f[v-c[i]]+w[i]};
背包问题 背包九讲
子序列问题
RMQ问题
树形dp
记忆化搜索
位运算压缩
文档评论(0)