Section 1.5 Number Triangles

本文介绍了一种使用动态规划解决寻找三角形路径中最大数值和的问题的方法。通过逐步迭代,更新每个节点的最大路径和,最终找到从顶点到底边的路径中数值之和最大的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是一道经典且容易的动态规划(dynamic programming)简称DP

状态转移方程很容易得出 f(i,j) = max(f(i,j) + max(f(i-1,j), f(i-1,j-1)),f(i,j);

当然此题没有复数 所以直接Inc 即可 本人一次AC

{
ID: yaoyuan4
PROG: numtri
LANG: PASCAL
}
Program numtri;
const
  inf = 'numtri.in'; outf = 'numtri.out';
var
  r, ans : longint;
  f : array[0..1000,0..1000] of longint;
Function max(a, b : longint) : longint;
  begin
   if a > b then exit(a) else exit(b);
  end;
Procedure init;
  var
   i, j : longint;
  begin
   fillchar(f, sizeof(f), 0);
   ans := 0;
   assign(input, inf); reset(input);
   readln(r);
   for i := 1 to r do
    begin
     for j := 1 to i do
      read(f[i,j]);
     readln;
    end;
   close(input);
  end;
Procedure work;
  var
   i, j : longint;
  begin
   for i := 1 to r do
    for j := 1 to i do
     inc(f[i, j], max(f[i-1, j], f[i-1, j-1]));
   for i := 1 to r do
    ans := max(ans, f[r, i]);
  end;
Procedure print;
  begin
   assign(output, outf); rewrite(output);
   writeln(ans);
   close(output);
  end;
begin
  init;
  work;
  print;
end.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值