- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机学院动态规划教学课件
第3讲 动态规划 第3讲 动态规划 一、算法总体思想 二、算法基本要素 三、算法范例分析 动态规划通常应用于最优化问题,即要做 出一组选择以达到一个最优解。在做选择 的同时,经常出现同样形式的问题。当某 一特定的子问题可能出自于多于一种选择 的集合时,动态规划是很有效的;关键技 术是存储这些子问题每一个的解,以备它 重复出现。 动态规划基本步骤 #include stdafx.h #include iostream.h void MatrixChain(int* p,int n,int m[][6],int s[][6]); void Traceback(int i,int j,int s[][6]); int main(int argc, char* argv[]) { int n=6; int m[6][6]; int s[6][6]; int p[7]; for (int i=0;i=n;i++) {cout\n 请输入正整数p(i); cinp[i]; } for (int ii=0;ii=n;ii++) coutp[ii] ; coutendlendlendl; MatrixChain(p,n,m,s); //coutnendl; Traceback(1,6,s); return 0; } 课堂练习 1.找零钱问题:设有n种不同面值的硬币,各硬币的 面值存于数组T[1:n]中。现要用这些面值的硬币来找 钱,可以实用的各种面值的硬币个数不限,使找零 钱时给出最少硬币的枚数。 当只用硬币面值T[1],T[2],…,T[i]时,可找出钱数j的 最少硬币个数记为C(i,j)。若只用这些硬币面值,找 不出钱数j时,记C(i,j)=∞。 设计一个动态规划算法,对1≤j≤L,计算出所有的C( n,j )。 算法中只允许实用一个长度为L的数组。用L和n作为变量来表 示算法的计算时间复杂性。 算法设计思想: 假设这一堆面值分别为 1、2、5、21、25 元,需要找出总值 T 为 63 元的零钱。很明显,只要拿出 3 个 21 元的硬币就凑够了 63 元了。 基于上述动态规划的思想,我们可以从 1 元开始计算出最少需要几个硬币,然后再求 2 元、3元…每一次求得的结果都保存在一个数组中,以后需要用到时则直接取出即可。那么我们什么时候需要这些子问题的解呢?如何体现出由子问题的解得到较大问题的解呢? 其实,在我们从 1 元开始依次找零时,可以尝试一下当前要找零的面值(这里指 1?元)是否能够被分解成另一个已求解的面值的找零需要的硬币个数再加上这一堆硬币中的某个面值之和,如果这样分解之后最终的硬币数是最少的,那么问题就得到答案了。 算法设计思想: 递归计算:假设对于i = 1...N-1, 所需最少的硬币数Count(i) 已 知, 那么对于N,所需的硬币数为Min( Count(i) + Count(N-i)) , i=1...N-1;但是,递归过程中,每次计算Count(i),都会重复计算 Count(1)....Count(i-1); 这样时间复杂度就是O(N2); 动态规划:可以从1开始记录下每个钱数所需的硬币枚数,避免重 复计算,为了能够输出硬币序列,我们还需要记录下每次新加入 的硬币。 当只用面值为T[1],T[2],…T[n]来找出钱j时,所用的硬币的最小个 数记为C(i,j),则C(i,j)的递推方程为: C(i,j)=min(C(i-1,j)+1),0=i=n public?class?CoinsChange?{ ?????/** ??????*?硬币找零:动态规划算法 ??????*?@param?values: 保存每一种硬币的币值的数组 ??????*?@param?valueKinds: 币值不同的硬币种类数量,即coinValue[]数组的大小 ??????*?@param?money: 需要找零的面值 ??????*?@param?coinsUsed: 保存面值为i的纸币找零所需的最小硬币数 ?*/?????public?static?void?makeChange(int[]?values,?int?valueKinds,?int?money, ?int[]?coinsUsed)?{ ??????????coinsUsed[0]?=?0; ?????????//?对每一分钱都找零,即保存子问题的解以备用,即填表 ?????????for?(int?cents?=?1;?cents?=?money;?cents++)?
您可能关注的文档
- 网络经济学案例分析 微软课件.ppt
- 美克尔憩室手术护理课件.ppt
- 罗家伦讲座妊娠期甲减治疗图文课件.ppt
- 血液透析血管通路PPT演示课件.pptx
- 网络软营销课件.ppt
- 美克尔憩室患儿围手术期护理图文课件.ppt
- 血液透析的血管通路图文课件.ppt
- 血液透析用血管通路图文课件.ppt
- 血液科病人胰岛素的使用课件.ppt
- 缺血性心肌病心电图课件_1.ppt
- 职业学院金山湾产教融合示范项目可行性研究报告申请报告.doc
- 职业教育智能实训设施提升可行性研究报告申请建议书YYY.doc
- 富士施乐Apeos C7071_C6571_C5571_C4571_C3571_C3071参考指南操作篇.pdf
- 富士施乐Apeos4620SDF使用说明书用户指南.pdf
- 富士施乐AC7071_C6571_C5571_C4571_C3571_C3071参考指南附录篇.pdf
- 富士施乐AC7071_C6571_C5571_C4571_C3571_C3071参考指南选装装置篇.pdf
- 人工智能科技主题高端简约模板88.pptx
- 人工智能科技主题高端简约模板14.pptx
- 人工智能科技主题高端简约模板55.pptx
- 人工智能科技主题高端简约模板119.pptx
文档评论(0)