動態規劃練習21:三角形最佳路徑問題
阿新 • • 發佈:2019-02-13
題目簡要:
描述如下所示的由正整數數字構成的三角形:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
從三角形的頂部到底部有很多條不同的路徑。對於每條路徑,把路徑上面的數加起來可以得到一個和,和最大的路徑稱為最佳路徑。你的任務就是求出最佳路徑上的數字之和。
注意:路徑上的每一步只能從一個數走到下一層上和它最近的下邊(正下方)的數或者右邊(右下方)的數。
從第二行開始,每行為三角形相應行的數字,中間用空格分隔。輸出最佳路徑的長度數值。樣例輸入
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 或 1 8
30 或 8
解題思路:
這是課件上的題,我就按老師上課講的思路寫的。
附程式碼:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[102][102],b[102][102];
int i,j,n;
cin>>n;
for (i=1;i<=n;i++)
for (j=1;j<=i;j++)
cin>>a[i][j];
for (j=1;j<=n;j++)
b[n][j]=a[n][j];
for (i=n-1;i>=1;i--)
for (j=1;j<=i;j++)
b[i][j]=a[i][j]+max(b[i+1][j],b[i+1][j+1]);
cout<<b[1][1]<<endl;
return 0;
}
解題感受:
啊啊啊,一定要注意細節,這道題我提交了7遍才A,就是因為我的陣列沒有清空·····所以,一定要注意細節。