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