- 1、本文档共39页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[企业管理]动态规划1
* 动态规划 【引例1、数字三角形】 有一个数字三角形,编程求从最顶层到最底层的一条路所经过位置上数字之和的最大值。每一步只能向左下或右下方向走。下图数据的路应为7-3-8-7-5,和为30。 输入: 第一行:R(1=R=100),数字三角形共有R行; 以下R行:依次表示数字三角形中每行中的数字。 每个数都是非负的,且=100. 输出:一个正整数,路径上数字之和的最大值。 输入样例: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 输出样例: 30 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 一、引例 算法一:深度优先有哪些信誉好的足球投注网站算法DFS: 二维数组a[i,j]存储数字三角形。 Procedure try(sum,i,j:integer); {从a[1,1]到走到第i行第j列即a[I,j]时所取得的值为sum} begin if i=n then begin if summax then max:=sum; exit; end; try(sum+a[i+1,j],i+1,j); {向左下方走} try(sum+a[i+1,j+1],i+1,j+1); {向右下方走} end; 开始时:try(a[1,1],1,1); 结果:max 为什么当n较大时速度慢? 方法一:依次求从起点(1,1)到点(i,j)的最大值。 设F[I,j]为从a[1,1]到达a[I,j]时取得的最大值. 根据题意可得出递推关系: 算法二: f[i,j]=max{f[i-1,j-1]+a[i,j],f[i-1,j]+a[I,j]} 或f[i,j]=max{f[i-1,j-1],f[i-1,j]}+a[I,j] 初始:f[1,1]:=a[1,1]; 目标:max{f[n,i]} 1=i=n procedure work begin f[1,1]:=a[1,1]; for i:=2 to n do {枚举行} for j:=1 to i do {枚举每行的元素} if f[i-1,j-1]f[i-1,j] then f[i,j]:=f[i-1,j-1]+a[i,j] else f[i,j]:=f[i-1,j]+a[i,j]; {枚举两种走法} ans:=f[n,1]; for i:=2 to n do if f[n,i]ans then ans:=f[n,i]; writeln(ans); end; procedure work2;{顺推} begin f[1,1]:=a[1,1]; for i:=2 to n do for j:=1 to i do f[i,j]:=max(f[i-1,j-1],f[i-1,j])+a[i,j]; ans:=f[n,1]; for i:=2 to n do if f[n,i]ans then ans:=f[n,i]; writeln(ans); end; function max(a,b:integer):integer; begin max:=a; if bmax then max:=b; end; 方法二:从最后一行向起点走 设F[I,j]:a[i,j]到达第n行a[n,k](k:1--n)的最大值. 递推关系: f[i,j]=max{f[i+1,j]+a[i,j],f[i+1,j+1]+a[I,j]} 或f[i,j]=max{f[i+1,j],f[i+1,j+1]}+a[I,j] 初始:f[n,i]:=a[n,i]; 1=i=n 目标:f[1,1] {procedure work begin for i:=1 to n do f[n,i]:=a[n,i]; for i:=n-1 downto 1 do {枚举行} for j:=1 to i do {枚举每行的元素} if f[i+1,j]f[i+1,j+1] then f[i,j]:=f[i+1,j]+a[i,j] else f[i,j]:=f[i+1,j+1]+a[i,j]; {枚举走法} writeln(f[1,1]); end; } 思考:算法一和算法二的主要区别在哪里? 算法一:每求一条从起点到终点的路线,中间的点都重新求一遍。做了大量的重复性计算。 算法二:中间结点的值只求一次,后边的点可以直接使用
您可能关注的文档
最近下载
- 2024译林版三年级英语上册期末专项训练:句子排序.pdf VIP
- 2022-2023学年济南市市中区九年级上学期期末化学试卷(含答案解析).docx
- 2023-2024学年福建省厦门市思明区莲花中学七年级(上)期末数学试卷及答案解析.pdf
- 家庭情况调查表【范本模板】.pdf VIP
- 北师大版(2024新版)七年级上册生物期末模拟练习试卷(含答案解析).docx
- 稠油油藏水平井堵水调剖技术研究应用.ppt
- 1_清稿1-质量管理体系认证规则(征求意见稿)V1.1.doc
- 财政数据迁移方案.docx
- 全员专项学习培训试题题库单选、多选试题附答案.doc
- 2025年蛇年总结PPT模板.pptx VIP
文档评论(0)