数字三角形问题 动态规划

数字三角形问题 动态规划

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开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见

在这里插入图片描述

原文地址:https://www.cnblogs.com/pjhaymy/p/13907460.html