数字三角形问题 动态规划
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;
}