- 27
- 0
- 约1.6万字
- 约 14页
- 2020-12-12 发布于江西
- 举报
全国青少年信息学奥林匹克联赛
动态规划实例分析及程序实现
一、数字三角形
(图3. 1-1)示出了一个数字三角形。 请编一个程序计算从顶至底的某处
的一条路
径,使该路径所经过的数字的总和最大。
●每一步可沿左斜线向下或右斜线向下走;
●1<三角形行数≤100;
●三角形中的数字为整数0,1,…99;
输入数据:
由INPUT.TXT 文件中首先读到的是三角形的行数。
在例子中INPUT.TXT表示如下:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出数据:
把最大总和(整数)写入OUTPUT.TXT 文件。
上例为:
30
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
(图3. 1-1)
二、算法分析
只要对该题稍加分析,就可以得出一个结论:
如果得到一条由顶至底的某处的一条最佳路径,那么对于该路径上的每一个中
间点来说,由顶至该中间点的路径所经过的数字和也为最大。因此该题是一个典型
的多阶段决策最优化
的问题。
我们采用动态规划中的顺推解法。按三角形的行划分阶段。若行数为n, 则可把
问题看作一个 n-1 个阶段的决策问题。从始点出发,依顺向求出第一阶段、第二阶
段,……,第 n-1 阶段中各决策点至始点的最佳路径,最终求出始点到终点的最佳
路径。
设:
fk (Uk)━━从第k阶段中的点Uk 至三角形顶点有一条最佳路径, 该路径
所经过的
数字的总和最大,fk (Uk)表示为这个数字和;
由于每一次决策有两个选择,或沿左斜线向下,或沿右斜线向下,因此设
Uk1━━k-1阶段中某点Uk 沿左斜线向下的点;
Uk2━━k-1阶段中某点Uk 沿右斜线向下的点;
dk (Uk1)━━k阶段中Uk1 的数字;
dk (Uk2)━━k阶段中Uk2 的数字;
因而可写出顺推关系式
fk (Uk)=max{fk-1 (Uk)+dk (Uk1),fk-1 (Uk)+dk (U
k2)}
f0 (U0)=0;
K=1,2,3,4,……n
经过一次顺推,便可分别求出由顶至底N个数的N条路径,在这N条路径所经
过的N个
数字和中,最大值即为正确答案。
三、程序分析
根据上述顺推关系,我们编写程序如下:
Program ID1P1;
Const
Maxn = 100;
Type
Node = Record
Val, Tot : Integer
{ 当前格数字; 从[1,1]到当前格的路径所经过的数字和 }
End;
Var
List : Array [1..Maxn, 1..Maxn] of Node; {计算表 }
N, Max, { 行数, 最大总和 }
I, J : Integer; {辅助变量 }
Fi : Text; {文件变量 }
Procedure Init;
Begin
Assign(Fi, INPUT.TXT); {文件名和文件变量连接 }
Reset(Fi); {文件读准备 }
Readln(Fi, N); {读三角形行数 }
For i := 1 to N Do {读入三角形各格的数字 }
For j := 1 to i Do
Read(Fi, List[i, j].Val);
Close(Fi)
End; {init}
Procedure Main;
Begin
List[1, 1].Tot := List[1, 1].Val; {从[1,1]位置开始往下顺推 }
For i := 2 to N Do
For j := 1 to i Do Begin
List[i, j].Tot := -1; {从[1,1]至[i,j]的数字和初始化 }
If (j 1) And
(List[i - 1, j - 1].Tot + List[i
您可能关注的文档
最近下载
- 河北_建设工程监理与相关服务酬金计费规则_冀建市研[2016]6号.pdf VIP
- 【寒假自修】高一语文:必修下册预习+自助训练(第14天).docx VIP
- 《中华人民共和国医师法》试题及答案.docx VIP
- 机电设备故障诊断与维修455.pptx VIP
- 明阳风机调试过程故障处理汇总.pptx VIP
- 蒂森电梯MC2教学(一)控制系统介绍.ppt
- 小直径长距离盾构隧道二次衬砌高效施工工法.pdf VIP
- 【寒假自修】高一语文:必修下册预习+自助训练(第15天).docx VIP
- 董事会议事规则(国有独资)范文.pdf VIP
- 【寒假自修】高一语文:必修下册预习+自助训练(第13天).docx VIP
原创力文档

文档评论(0)