閱讀452 返回首頁    go 阿裏雲 go 技術社區[雲棲]


經典動態規劃基礎題-三角形最大和問題

三角形最大和問題

Time Limit:1000MS Memory Limit:65536K
Total Submit:79 Accepted:22

Description

現在經常有一些數學問題困擾著小明。有如下一個三角形,

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

小明想求出從頂至底的某處的一條路徑,使該路徑所經過的數字的總和最大。現在想請你編一個程序實現這個問題。
說明:
(1)每一步可沿左斜線向下或右斜線向下;
(2)1<三角形行數≤100;
(3)三角形中的數字為0,1,...,99。

Input

輸入有多個實例。每個測試用例的第一行是三角形的行數n,接下來是n行數字,每行數字的個數由1開始,依次加1。

Output

輸出每個測試用例的最大和(整數),每行1個。

Sample Input


5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

Sample Output


30

Source

 

//最最基礎,最最經典的動態規劃入門題

#include<stdio.h>
#include<string.h>
int a[200][200],dp[200][200];
int max(int a,int b)
{return a>b?a:b;}
int main()
{
    int i,j,n,m;
    while(~scanf("%d",&n))
    {
       memset(a,0,sizeof(a));
       for(i=1;i<=n;i++)
       for(j=1;j<=i;j++)
       scanf("%d",&a[i][j]);
       for(j=1;j<=n;j++) dp[n][j]=a[n][j];
       for(i=n-1;i>=1;i--)
       for(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;
} 


最後更新:2017-04-03 12:55:32

  上一篇:go Android_深入解析AsyncTask
  下一篇:go C# 係統應用之無標題窗體移動的兩種方法