1. 程式人生 > >洛谷 P1216 [USACO1.5]數字三角形 Number Triangles

洛谷 P1216 [USACO1.5]數字三角形 Number Triangles

pre 一個 特定 輸入輸出 題目 最大的 窮舉法 數字金字塔 結束

題目描述

觀察下面的數字金字塔。

寫一個程序來查找從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。

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

在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大

輸入輸出格式

輸入格式:

第一個行包含 R(1<= R<=1000) ,表示行的數目。

後面每行為這個數字金字塔特定行包含的整數。

所有的被供應的整數是非負的且不大於100。

輸出格式:

單獨的一行,包含那個可能得到的最大的和。

輸入輸出樣例

輸入樣例#1:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5 
輸出樣例#1:
30

說明

題目翻譯來自NOCOW。

USACO Training Section 1.5

由於此題並不是特別難,所以就不發代碼了,,,但是思路是肯定會講清楚的。

蒟蒻一來看到這題,大叫:“哇,這題真簡單!貪心就行啦!”

但是貪心法的缺點在此題中一覽無余的展現了出來:目光短淺。

如果按照貪心法思路,則:7-8-1-7-5,其和為28;

但是!!!

存在著另外一條路:7-3-8-7-5,其和為30。

所以貪心法就OUT了。。。

然後蒟蒻又想:貪心法不行,那窮舉總行了吧!

結果這次蒟蒻又想錯了……

在本題中,R<=1000,要是用窮舉法只有一種結果:TLE。

所以!!!

本題唯一的方法就是:動態規劃!!!

此題需用遞推。

遞推共有兩種方法可以選擇:順推法和逆推法,兩種方法皆可。

實際上可以這樣理解兩種方法的區別:順推法是從頂層推到底層,而逆推法則是從底層推到頂層的。

講到這裏,想必整道題的思路已經給大家理清楚了,大家就自己寫程序吧!

洛谷 P1216 [USACO1.5]數字三角形 Number Triangles