第九章 動態規劃-1288:三角形最佳路徑問題

1288:三角形最佳路徑問題

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 2578 通過數: 2251
【題目描述】
如下所示的由正整數數字構成的三角形:

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到一個和,和最大的路徑稱爲最佳路徑。你的任務就是求出最佳路徑上的數字之和。

注意:路徑上的每一步只能從一個數走到下一層上和它最近的下邊(正下方)的數或者右邊(右下方)的數。

【輸入】
第一行爲三角形高度100≥h≥1,同時也是最底層邊的數字的數目。

從第二行開始,每行爲三角形相應行的數字,中間用空格分隔。

【輸出】
最佳路徑的長度數值。

【輸入樣例】
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
【輸出樣例】
30


思路:思路:確定狀態(1,1)出發到底層。確定狀態方程和邊界條件。向左:(1,1)->f(i-1,y)+ a[i,j],向右發f(i-1,j-1)+a[i,j]. ,邊界條件:f[1][1] = a[1][1];

#include <iostream>
#include <cstdio>
#define N 200
using namespace std;
 
int f[N][N], a[N][N];
int ans, n;
int main() {
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= i; j++) scanf("%d", &a[i][j]);
    f[1][1] = a[1][1];
    for(int i = 2; i <= n; i++)
        for(int j = 1; j <= i; j++) f[i][j] = max(f[i-1][j], f[i-1][j-1]) + a[i][j];
    for(int i = 1; i <= n; i++) ans = max(f[n][i], ans);
    printf("%d\n", ans);
    return 0;
} 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章