数字三角形问题 动态规划
程序员文章站
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开发,操作系统,计算机网络,觉得我的文章有帮助的小伙伴可以关注我,有疑问可评论私信,相逢即是缘,大家高处见
上一篇: 网络安装设置
下一篇: 动态规划之数字三角形