經典動態規劃基礎題-三角形最大和問題
三角形最大和問題
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