欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字三角形问题 动态规划

程序员文章站 2024-02-21 18:55:10
...

数字三角形问题 动态规划

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

数字三角形问题 动态规划

相关标签: 算法