1. 程式人生 > 實用技巧 >數字三角形問題 動態規劃

數字三角形問題 動態規劃

數字三角形問題 動態規劃

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;
   
} 

以上就是數字三角形問題 動態規劃的解決方案,如有幫助還請點贊關注支援,如有疑問評論私信都可,看到後可幫助解答本部落格主要側重於資料結構於演算法和java開發,作業系統,計算機網路,覺得我的文章有幫助的小夥伴可以關注我,有疑問可評論私信,相逢即是緣,大家高處見