下载此文档

动态规划初步.ppt


文档分类:IT计算机 | 页数:约63页 举报非法文档有奖
1/63
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/63 下载此文档
文档列表 文档介绍
动态规划初步
山东青岛第二中学
臧方青
一:为理解概念的几个实例

一个含有n阶的楼梯,一次可以走1步或2步,从底走到顶一共有几种走法?n<=90。
还记得昨天的基础算法中得这个题的解法吗?
——
f(1)=1
f(2)=2
f(n)=f(n-1)+f(n-2)
算法一:递归
var
n:integer;
function dp(i:integer):longint;
begin
if i=1 then exit(1);
if i=2 then exit(2);
dp:=dp(i-1)+dp(i-2);
end;
begin
readln(n);
writeln(dp(n));
end.
算法二:利用函数实现记忆化搜索
const
maxn=45;
Var
n:integer;
f:array[1..maxn] of longint;
function dp(i:integer):longint;
begin
if i=1 then exit(1);
if i=2 then exit(2);
if f[i]>0 then exit(f[i]);
dp:=dp(i-1)+dp(i-2);
f[i]:=dp;
end;
Begin
readln(n); writeln(dp(n));
end.
算法三:利用过程实现记忆化搜索
const
maxn=90;
var
n:integer;
f:array[1..maxn] of qword;
procedure dp(i:integer);
begin
if i=1 then begin f[i]:=1; exit; end;
if i=2 then begin f[i]:=2; exit; end;
if f[i]>0 then exit;
dp(i-1);
dp(i-2);
f[i]:=f[i-1]+f[i-2];
end;
begin
readln(n);
dp(n);
writeln(f[n]);
end.
算法四:递推
const
maxn=90;
var
n:integer;
f:array[1..maxn] of qword;
procedure dp;
var i:integer;
begin
f[1]:=1; f[2]:=2;
for i:=3 to n do f[i]:=f[i-1]+f[i-2];
end;
begin
readln(n);
dp;
writeln(f[n]);
end.
让我们一起分析每种算法的优劣。
2、数字三角形
有一个数字三角形,编程求从最顶层到最底层的一条路所经过位置上数字之和的最大值。每一步只能向左下或右下方向走。下图数据的路应为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
算法1:深度优先搜索算法DFS:
二维数组a[i,j]存储数字三角形。
Procedure dfs(sum,i,j:integer);
{从a[1,1]到走到第i行第j列即a[I,j]时所取得的值为sum}
begin
if i=n then
begin if sum>max then max:=sum; exit; end;
dfs(sum+a[i+1,j],i+1,j); {向左下方走}
dfs(sum+a[i+1,j+1],i+1,j+1); {向右下方走}
end;
开始时:dfs(a[1,1],1,1);
结果:max
时间复杂度怎样?
算法二:记忆化搜索
f:array[0..100,0..100] of integer;f[I,j] : (I,j) 到最后一行的最大值
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end;
Procedure dfs(i,j:integer);
begin
if i=n then
begin f[i,j]:=a[i,j]; exit; end;
if f[i,j]>0 then exit;
dfs(i+1,j);
dfs(i+1,j+1);
f[i,j]:=max(f[i+1,j],f[i+1,j+1])+

动态规划初步 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数63
  • 收藏数0 收藏
  • 顶次数0
  • 上传人neryka98
  • 文件大小331 KB
  • 时间2018-05-15