藍橋杯 數字三角形(簡單DP)

算法訓練 數字三角形  
時間限制: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<stdio.h>
#include<string.h>
#include<cmath>
using namespace std;
int a[105][105];
int dp[105][105];
int max(int x,int y)
{
    if(x>=y)
        return x;
    return y;
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        memset(a,0,sizeof(a));
        for(int i=1; i<=n; i++)
            for(int j=1; j<=i; j++)
                scanf("%d",&a[i][j]);
        for(int i=n; i>=1; i--)
            for(int j=1; j<=i; j++)
                dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j+1]);
        printf("%d\n",dp[1][1]);
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章