1. 程式人生 > >【DP】數字金字塔

【DP】數字金字塔

極其簡略的一篇

題目

考慮在下面被顯示的數字金字塔。 寫一個程式來計算從最高點開始在底部任意處結束的路徑經過數字的和的最大。 每一步可以走到左下方的點也可以到達右下方的點。 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 在上面的樣例中,從7 到 3 到 8 到 7 到 5 的路徑產生了最大和:30

Input

第一個行包含 R(1<= R<=1000) ,表示行的數目。 後面每行為這個數字金字塔特定行包含的整數。 所有的被供應的整數是非負的且不大於100。

Output

單獨的一行包含那個可能得到的最大的和。

程式碼

#include<cstdio>
using namespace std;
int n,a[1003][1003]={0},ans[1003][1003]={0};
int d(int a,int b){
    if(a>b) return a;
    else return b;
}
int main(){
    scanf("%d",&n);
    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++) ans[i][j]=d(ans[i+1][j],ans[i+1][j+1])+a[i][j]; printf("%d",ans[1][1]); return 0; }