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