演算法訓練 數字三角形 (動態規劃)
阿新 • • 發佈:2019-02-07
演算法訓練 數字三角形 時間限制: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
徑,使該路徑所經過的數字的總和最大。
●每一步可沿左斜線向下或右斜線向下走;
●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; }