第三章 noip教程--动态规划.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
注意到任意一棵子树的中序遍历一定是一段连续的区间 枚举区间中的第几个元素作为这一段区间的根 记f[i][j]表示中序遍历为[i,j]这个区间的子树的最大分数,g[i]表示第i个点的分数 F[i][j]=max(F[i][k-1]*F[k+1][j]+g[i]) 初始条件:F[i][j]=0 Solution 给你一个矩阵,其边长均为整数。你想把矩阵切割成总数最少的正方形,其边长也为整数。切割工作由一台切割机器完成,它能沿平行于矩形任一边的方向,从一边开始一直切割到另一边。对得到的矩形再分别进行切割。 矩形边长小于等于100 例7. 矩形分割问题 F[i][j]表示长为i宽为j的矩形所需的最小正方形个数 F[i][j]=min(F[i][k]+F[i][j-k],F[k][j]+F[i-k][j]) Solution 见外部题目描述 例8. psolve 状态:F[i][j]表示i~j在一个月做完的最小所需月份 枚举上一个做了k~i-1 转移方程:F[i][j]=min(F[k][i-1]+1), s1[i][j]+s2[k][i-1]=P, 且F[k][i-1]合法 初始条件:F[0][0]=1 此题写起来有好多小细节,建议练习代码 Solution 动态规划问题具有以下基本特征: 1、问题具有多阶段决策的特征。 2、每一阶段都有相应的“状态”与之对应,描述状态的量称为“状态变量”。 3、每一阶段都面临一个决策,选择不同的决策将会导致下一阶段不同的状态。 4、每一阶段的最优解问题可以递归地归结为下一阶段各个可能状态的最优解问题,各子问题与原问题具有完全相同的结构。 动态规划的基本模型 状态压缩是一种非常暴力的动态规划,特征也非常明显,一般适用于数据规模较小的情况。 状态压缩复杂度通常情况下是是指数级的,编程复杂度也相对较大。 所谓状态压缩,就是把一个比较复杂的状态压缩为一个数,通常采用某一种进制的表示方法 经常通过记忆化搜索来实现 Part 3. 状态压缩动态规划 放寒假了,小D终于可以回家了。一个学期之后他有太多的东西想带回家。 小D的背包可以被看作一个4行N列的矩阵,每个物品放入背包的物品恰好需要占据两个相邻的方格,任意两个物品不能占据相同的方格。为了充分的利用自己的背包,小D希望背包的所有空间都放置了物品,也就是说,背包中恰好放入了2N个物品。 现在小D想知道,不同的放置方案数有多少种。 例9. 多米诺骨牌覆盖 搜索? n很大,超时严重 动态规划? 如何表示状态? 注意到每一列最多只有4行,每一个格子对下一行的影响只有2种:下一行对应的格子是否可以和当前格子一起放进一个物品 状态压缩!0/1表示每个格子的状态,4位二进制数表示一行的状态 Solution 用F[k][S]来描述一个状态,这个状态表示已经把矩阵的前k-1列全部放满,并且第k列的覆盖情况为S(s为一个4位二进制数),此时的摆放方案数(注意,其实只有S中1的个数为偶数时状态才有意义,更加深入的探讨会发现需要使用的状态很少)。 通过枚举第k列骨牌的放置方案,不难得到从F[k][u](u = 0 … 15)到F[k+1][v](v = 0 … 15 )的转移方程。这个过程需要另外写一个程序去枚举才能完成。 Solution L盏灯,每盏灯为0/1,表示亮的或暗的 有一个叉子有T个叉尖,相邻两个叉尖的距离等于相邻两盏灯的距离。有些叉尖断了,用0表示,否则为1 叉子对准开关,可以改变灯的状态 已知初始灯的状态和叉尖状态,求叉尖操作的序列使得最后亮着的灯最少 L=50, T=7 例10.xlite 同一位置只可能操作一次 可以从左到右依次操作 F[i][S]表示最后T盏灯灯的状态为S时,前i盏灯至少还亮着多少盏 S为一个T位二进制,0表示暗,1表示亮 枚举是否在i-T+1~i+1操作,从而转移到F[i+1][K] 时间复杂度:O(L*2^T) Solution 一定要符合最优化原理,即满足最优子结构 可按照某一顺序,从小到大求解 从大到小求解可用记忆化搜索 注意边界条件 转移方程一定要清晰,不要漏情况 状态的意义一定要清晰 DP注意事项 Thx~ Questions are welcome ? 动态规划 陈爽 为了解决一类最优化问题 通过求得所有子问题的最优解来得到最终问题的最优解 动态规划 状态 状态转移方程 初始条件 动态规划的基本要素 线性动态规划 区间动态规划 状态压缩动态规划 树形动态规划 动态规划的分类 状态是一维的 F[i] 由 F[j] (ji) 得到 初始条件 F[0] 或 F[1] Part 1 线性动态规划 设有整数序列b1,b2,b3,…,bm,若存在下标i1i2i3 …in,且bi1bi2bi3 …bin,则称 b1,b

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档