标签:
明明站在一个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.
标签:
原文地址:http://www.cnblogs.com/Herrwerner/p/4482168.html