洛谷 P1216 [USACO1.5]數字三角形 Number Triangles
阿新 • • 發佈:2017-10-07
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