zoukankan      html  css  js  c++  java
  • 数字三角形:顺推法(二维数组)

    题意

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


    分析

    这题我是用顺推法来做的

    按三角形的行划分阶段,若行数为 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.

  • 相关阅读:
    变量声明和定义的关系
    STL之Vector
    STL之顺序容器
    类成员函数可以为回调函数吗
    排序
    名字查找
    Java 写 Log
    Spring 框架中注释驱动的事件监听器详解
    Centos7 安装gitLab
    世界经济史是一部基于假象和谎言的连续剧
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9500180.html
Copyright © 2011-2022 走看看