明明站在一個N x N的方陣中最左上角的格子裏。他能夠從一個格子走到它右邊和下邊的格子裏。ide
每個格子都有一個傷害值。他想在受傷害最小的狀況下走到方陣的最右下角。spa
一看就知道用DP。後一格的最小傷害,爲它左邊或上邊格子的最小傷害加本身格子的傷害。code
因此 f[i,j]:=min(f[i,j-1],f[i-1,j])+a[i,j]. blog
邊界 f[1,1]:=a[1,1]it
f[i,1]:=f[i-1,1]+a[i,1]event
f[1,j]:=f[1,j-1]+a[1,j]class
程序供上cli
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.