最小伤害 题解

问题描述

明明站在一个N x N的方阵中最左上角的格子里。他可以从一个格子走到它右边和下边的格子里。

每一个格子都有一个伤害值。他想在受伤害最小的情况下走到方阵的最右下角。

解题思路

一看就知道用DP。后一格的最小伤害,为它左边或上边格子的最小伤害加自己格子的伤害。

所以 f[i,j]:=min(f[i,j-1],f[i-1,j])+a[i,j]. 

边界 f[1,1]:=a[1,1]

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

       f[1,j]:=f[1,j-1]+a[1,j]

程序供上

uses math;
var n:longint;
    a,f:array[0..1000,0..1000]of longint;
    i,J:longint;
begin
read(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[i,1]:=f[i-1,1]+a[i,1];
 f[1,i]:=f[1,i-1]+a[1,i];
 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];
write(f[n,n]);
end.
View Code

 

posted @ 2015-05-06 15:29  Herrwerner  阅读(259)  评论(0编辑  收藏  举报