最小伤害 题解

【问题描述】

把儿站在一个NxN的方阵中最左上角的格子里。他可以从一个格子走到它右边和下边的格子里。每一个格子都有一个伤害值。他想在受伤害最小的情况下走到方阵的最右下角。

给定N与N×N方阵中的伤害值,求出最小伤害。

【样例输入】

    5

    1 0 0 0 0

    0 1 0 0 0

    0 0 1 0 0

    0 0 0 1 0

    0 0 0 0 1

【样例输出】

   2

【解题思路】

  这道题与过河卒(NOIP2002)的思路一样,且比过河卒更加容易(少了马的控制),典型的递推问题,用DP解决。

【动规方程】

  f[i,j]:=min(f[i-1,j],f[i,j-1])+a[i,j](2<=i<=n,2<=j<=n);

【边界条件】

   f[1,1]:=a[1,1];f[1,i]:=f[1,i-1]+a[1,i](2<=i<=n);f[i,1]:=f[i-1,1]+a[i,1](2<=i<=n);

   注意!最上边和最左边的两排也要先赋值!

【代码实现】

uses math;//这里用了数学库,就可以直接调用min函数,数学库中有许多有用的函数,就不必自己手写了。
var a,f:array[1..1000,1..1000] of longint;
    i,j,n:longint;
begin
 readln(n);
 for i:=1 to n do
  for j:=1 to n do
   read(a[i,j]);
//边界赋值
 f[1,1]:=a[1,1];
 for i:=2 to n do
  begin
   f[1,i]:=f[1,i-1]+a[1,i];
   f[i,1]:=f[i-1,1]+a[i,1];
  end;
//动态规划
 for i:=2 to n do
  for j:=2 to n do
   f[i,j]:=min(f[i-1,j],f[i,j-1])+a[i,j];
 writeln(f[n,n]);
end.
最小伤害

 

转载于:https://www.cnblogs.com/PengBoLiuXu/p/4481718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值