题目描述
数学课上,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])
自行理解······
代码:
vari,j,n,m:longint;a:array[0..150,0..150] of longint;
function min(x,y:longint):longint;
beginif x<y then exit(x);exit(y);
end;
beginassign(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 doa[0,i]:=maxlongint div 3;for i:=1 to n doa[i,0]:=maxlongint div 3;for i:=1 to n dofor j:=1 to m doif (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.