數字三角形問題 動態規劃

數字三角形問題 動態規劃

OJ 問題:Triangle(參見 http://poj.org/problem?id=1163)
題意:在數字三角形上尋找一條沿相鄰頂點從頂到底走的路徑,使路徑上的數字和最大。
輸入:三角形高度 n,數字三角形數值。
輸出:最大數字和。java

在這裏插入圖片描述

解決思路:

由下而上逐個計算個點到最低端的最大路徑,由於最大路徑的子路徑也必定是最大路徑,並且右下而上只有兩個方向,一個是正上方一個是右上方
好比4到達最頂端的最大路徑的子路徑必定包含2和7,而2到頂端的最大路徑必定包含8或者1,以此類推
咱們用一個數組表示範圍一個數組表示距離
在這裏插入圖片描述ios

解題代碼

#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開發,操做系統,計算機網絡,以爲個人文章有幫助的小夥伴能夠關注我,有疑問可評論私信,相逢便是緣,你們高處見

在這裏插入圖片描述

相關文章
相關標籤/搜索