欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

数字三角形:顺推法(二维数组)

发布时间:2025/3/15 23 豆豆
生活随笔 收集整理的这篇文章主要介绍了 数字三角形:顺推法(二维数组) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题意

写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。


分析

这题我是用顺推法来做的

按三角形的行划分阶段,若行数为 n,则可把问题看做一个n-1个阶段的决策问题。先求第2行各元素到起点的最大和,再依次求出第3,4,5,......,.n-1,n到起点的最大和,最后找第n行的最大值设f[i,j]为第i行第j列上点到起点的最大和,状态转移方程为:

则 f[1,1]=a[1,1];

       f[i,1]=a[i,1]+f[i-1,1];

       f[i,j]=max{a[i,j]+f[i-1,j-1],a[i,j]+f[i-1,j]}   2<=j<=i

 max(f[n,1],f[n,2],.......,f[n,n]}即为所求。



var
n,i,j,maxsum:longint;
a,f:array[1..1000,1..1000]of longint;
begin
    readln(n);
    for i:=1 to n do
    for j:=1 to i do
    read(a[i,j]);
    f[1,1]:=a[1,1];
    for i:=2 to n do
    begin
        f[i,1]:=a[i,1]+f[i-1,1];
        for j:=2 to i do
        if f[i-1,j-1]>f[i-1,j] then f[i,j]:=a[i,j]+f[i-1,j-1] else
        f[i,j]:=a[i,j]+f[i-1,j];
    end;
    maxsum:=0;
    for i:=1 to n do
    if f[n,i]>maxsum then maxsum:=f[n,i];
    write(maxsum);
end.

转载于:https://www.cnblogs.com/YYC-0304/p/9500180.html

总结

以上是生活随笔为你收集整理的数字三角形:顺推法(二维数组)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。