题目描述
数学课上,D突然想到一件很重要的事情要告诉Z,但是她们分别坐在教室的左前方和右后方,这可怎么办呢?
D决定传纸条!
但是问题又出现了,D要告知Z的是个机密,D不希望有很多人知道。可是由于纸条必须经过其它同学,所以D只好希望知道这个机密的人越少越好。
每个同学都有一个好奇程度k(0≤k≤20),好奇程度越大,偷看纸条的可能性也就越大,D希望传递纸条的路径经过的同学的好奇程度和越小越好。
我们假定每个同学只会将纸条传递给ta后方或者右方的同学。
输入
第1行,两个整数n,m,表示教室有n行m列。(1≤n,m≤100)
第2行到第n+1行,每行m个整数,表示每个同学的好奇程度。
其中D在第1行第1列,Z在第n行第m列,她们的好奇程度都为0。
输出
共1行,1个整数,表示传递路径的好奇程度.。
样例输入
5 4
0 10 8 3
4 19 16 4
12 9 13 12
13 14 19 15
13 4 18 0
样例输出
52
数据范围限制
题解:
f[i,j]:=f[i,j]+min(f[i-1,j],f[i,j-1])
自行理解······
代码:
var
i,j,n,m:longint;
a:array[0..150,0..150] of longint;
function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end;
begin
assign(input,'note.in');reset(input);
assign(output,'note.out');rewrite(output);
readln(n,m);for i:=1 to n do for j:=1 to m do read(a[i,j]);
for i:=1 to m do
a[0,i]:=maxlongint div 3;
for i:=1 to n do
a[i,0]:=maxlongint div 3;
for i:=1 to n do
for j:=1 to m do
if (i<>1)or(j<>1) then a[i,j]:=a[i,j]+min(a[i-1,j],a[i,j-1]);
writeln(a[n,m]);
close(input);close(output);
end.