數字三角形(順推2維,逆推,順推1維)

2021-07-27 20:07:54 字數 2415 閱讀 1198

數字金字塔

time limit:1000ms  memory limit:65536k

total submit:403 accepted:232

description

你和權權是一對很好很好的朋友。有一天,你們無聊得很,便上網衝浪,突然在乙個叫做usaco的網中找到了乙個遊戲:《數字金子塔》。遊戲規則是這樣的:求乙個數字金字塔中從最高點開始在底部任意處結束的路徑經過數字的和的最大,其中的每一步可以走到下方的點也可以到達右下方的點。例如在下面的例子中,從7 — 3 — 8 — 7 –- 5的路徑產生了最大和:30。 

7 3 8 

8 1 0 

2 7 4 4 

4 5 2 6 5 

你們便約定了誰能計算出最後的值便是贏者。你仰天(天花板)長嘆:我能成為贏者嗎,要知道權權可是很厲害的哦…… 

input

第一行輸入n(1<=n<=1000),表示數字金字塔行的數目。後面n輸入這個數字金字塔,每個數字皆為整數(1<=x<=10000),每2個整數之間有1個空格。

output

單獨一行輸出最後得到的最大的和。

sample input57

3 88 1 0

2 7 4 4

4 5 2 6 5

sample output

30順推2維:

var

a,f:array[1..1000,1..1000]of longint;

i,j,n,max,ans:longint;

function max1(a,b:longint):longint;

begin

if a>b then exit(a);

exit(b);

end;

begin

readln(n);

for i:=1 to n do

for j:=1 to i do

read(a[i,j]);

f[1,1]:=a[1,1];

for i:=2 to n do

f[i,1]:=f[i-1,1]+a[i,1];

for i:=2 to n do

for j:=2 to i do

f[i,j]:=max1(f[i-1,j],f[i-1,j-1])+a[i,j];

for i:=1 to n do

if f[n,i]>=max then max:=f[n,i];

write(max);

end.

轉移方程:f[i,j]:=max(f[i-1,j],f[i-1,j-1])+a[i,j];
逆推:
var

a,f:array[1..1000,1..1000]of longint;

i,j,n:longint;

function max(a,b:longint):longint;

begin

if a>b then exit(a);

exit(b);

end;

begin

read(n);

for i:=1 to n do

for j:=1 to i do

read(a[i,j]);

for i:=1 to n do

f[n,i]:=a[n,i];

for i:=n-1 downto 1 do

for j:=1 to i do

f[i,j]:=max(f[i+1,j],f[i+1,j+1])+a[i,j];

write(f[1,1]);

end.

轉移方程:f[i,j]:=max(f[i+1,j],f[i+1,j+1])+a[i,j];
順推1維:
var

a:array[1..1000]of longint;

f:array[1..1000]of longint;

i,j,n,ans:longint;

function max(a,b:longint):longint;

begin

if a>b then exit(a);

exit(b);

end;

begin

read(n);

for i:=1 to n do

begin

for j:=1 to i do

read(a[j]);

for j:=i downto 2 do

f[j]:=max(f[j-1],f[j])+a[j];

f[1]:=f[1]+a[1];

end;

for i:=1 to n do

if f[i]>=ans then ans:=f[i];

write(ans);

end.

轉移方程:f[j]:=max(f[j-1],f[j])+a[j];

數字三角形(順推二維版)

題目描述 觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 輸入輸出格式 輸入...

數字三角形 順推法(一維陣列)

題意 寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。分析f j 表示第i行第j個位置上的數到頂點的最大值。f j max2 jf 1 a 1 f 1 varn,i,j,w longint a,f array 1.10000 of...

數字三角形(逆推二維版)

題目描述 觀察下面的數字金字塔。寫乙個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大 輸入輸出格式 輸入...