【动规初步】数字三角形

题目描述

如下所示为一个数字三角形: 

3 8 
8 1 0 
2 7 4 4 
4 5 2 6 5 
请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。 
 ● 每一步可沿直线向下或右斜线向下走; 
 ● 1<三角形行数≤100; 
 ● 三角形中的数字为整数0,1,……,99;

输入

第一行为一个自然数,表示数字三角形的行数n,接下来的n行表示一个数字三角形。

输出

仅有一行包含一个整数,表示要求的最大总和。

样例输入

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

样例输出

max=30

#include<bits/stdc++.h>
using namespace std;
int n;
int tri[102][102];
int f[102][102];
int main()
{
    cin >> n;
    int i,j;
    for(i = 0;i < n;i++)
        for(j = 0;j <= i;j++)
        {
            cin >> tri[i][j];
        }
    for(i = 0;i < n;i++)
        for(j = 0;j <= i;j++)
        {
            f[i][j] = max(f[i-1][j],f[i-1][j-1]) + tri[i][j];
        }
    for(i = 0;i<n;i++)
    f[n-1][0]=max(f[n-1][0],f[n-1][i]);
    cout << "max=" <<f[n-1][0];
    return 0;
}

 

posted @ 2018-10-29 19:35  LizLiz  阅读(191)  评论(0)    收藏  举报