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; }