數字三角形問題 動態規劃
阿新 • • 發佈:2020-10-31
數字三角形問題 動態規劃
OJ 問題:Triangle(參見 http://poj.org/problem?id=1163)
題意:在數字三角形上尋找一條沿相鄰頂點從頂到底走的路徑,使路徑上的數字和最大。
輸入:三角形高度 n,數字三角形數值。
輸出:最大數字和。
解決思路:
由下而上逐個計算個點到最低端的最大路徑,因為最大路徑的子路徑也一定是最大路徑,而且右下而上只有兩個方向,一個是正上方一個是右上方
比如4到達最頂端的最大路徑的子路徑一定包含2和7,而2到頂端的最大路徑一定包含8或者1,以此類推
我們用一個數組表示範圍一個數組表示距離
解題程式碼
#include<iostream> using namespace std; int main(){ //輸入的陣列 int arr[100][100]; //表示距離的陣列 int max[100][100]={0}; //輸入三角形的行數 int length; cin>>length; //逐個輸入元素 for(int i=1;i<=length;i++){ for(int j=1;j<=i;j++){ cin>>arr[i][j]; if(i==length){ //最底層的最大路徑是本身 max[i][j]=arr[i][j]; } } } //從底層開始遞推 for(int j=length-1;j>=1;j--){ for(int i=1;i<=length-1;i++){ //正下方 int one=max[j+1][i]; int two=max[j+1][i+1]; if(one>=two){ max[j][i]=one+arr[j][i]; } else{ max[j][i]=two+arr[j][i] ; } } } cout<<max[1][1]<<endl; }