1. 程式人生 > >演算法訓練 數字三角形 (動態規劃)

演算法訓練 數字三角形 (動態規劃)

演算法訓練 數字三角形  時間限制:1.0s   記憶體限制:256.0MB問題描述  (圖3.1-1)示出了一個數字三角形。 請編一個程式計算從頂至底的某處的一條路
  徑,使該路徑所經過的數字的總和最大。
  ●每一步可沿左斜線向下或右斜線向下走;
  ●1<三角形行數≤100;
  ●三角形中的數字為整數0,1,…99;


  .
  (圖3.1-1)輸入格式  檔案中首先讀到的是三角形的行數。

  接下來描述整個三角形輸出格式  最大總和(整數)樣例輸入5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5樣例輸出30

注:從下往上找,一次找最大的加到上面的資料中,二維陣列的最頂上的資料,就是要求得的最大的資料。

#include<bits/stdc++.h>
using namespace std;
	int main(){
    int n;
    scanf("%d",&n);
    int m[n][n];
    for(int i=0;i<n;i++){  
        for(int j=0;j<=i;j++){  
            scanf("%d",&m[i][j]);
        }  
    } 
    for(int i=n-1;i>0;i--) {
        for(int j=0;j<i;j++){
            if(m[i][j]>m[i][j+1]){
                m[i-1][j] += m[i][j];
            }else{
                m[i-1][j] += m[i][j+1];
            }
        }
    }
    printf("%d",m[0][0]);
    return 0;
}