Usaco 1.5.1 数字金字塔(Number Triangles)

题目:

 数字金字塔

来源:

 Usaco1.5.1

题目大意:

 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以  走到左下方的点也可以到达右下方的点。该图形为R行R列的三角

数据范围:

 1<= R<=1000,所有的被供应的整数是非负的且不大于100

样例:

 5
 7
 3 8
 8 1 0
 2 7 4 4
 4 5 2 6 5 
30
 
 
 
 
 

做题思路:

 这么经典的递推或者说是动规,还用解释吗?每个状态来自左上或者上方(我倒着推的,自底  向上),就一个最大的

知识点:

 动态规划

{
ID:Dount Nameless
TASK:numtri
LANG:PASCAL
}
var
 f,a:array[0..1000,0..1000]of longint;
 n,i,j,k:longint;
function max(a,b:longint):longint;
begin
 ifa>b then exit(a);
 exit(b);
end;
begin
 assign(input,'numtri.in');reset(input);
 assign(output,'numtri.out');rewrite(output);
 readln(n);
 fori:=1 to n do
 begin
  for j:=1 to i do
   begin
    read(a[i,j]);
    if i=n then f[i,j]:=a[i,j];{<倒着来的,所以对最后一行赋值>}
   end;
  readln;
 end;
 fori:=n-1 downto 1 do
  forj:=1 to i do
  f[i,j]:=max(f[i+1,j],f[i+1,j+1])+a[i,j];{<转移方程>}
 writeln(f[1,1]);
 close(input);close(output);
end.
题目来源: http://ace.delos.com/usacoprob2?a=RexmW8CclSt&S=numtri

你可能感兴趣的:(Usaco,动态规划)