数塔问题

题目描述

数字三角形。如下所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。

1、 一步可沿左斜线向下或右斜线向下走;

2、 三角形行数小于等于100;

3、 三角形中的数字为0,1,…,99;

测试数据通过键盘逐行输入,如上例数据应以如下所示格式输入:

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

输入格式

第一行输入一个整数N,表示数塔高度

接下去N行,第i行有i个整数

输出格式

输出一个整数

输入样例

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

输出样例

30

CODE

#include<bits/stdc++.h>
using namespace std;

int mp[110][110], dp[110][110], n;

int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= i; j++){
            scanf("%d", &mp[i][j]);
            dp[i][j] = mp[i][j];
        }
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= i; j++){
            dp[i][j] += max(dp[i-1][j-1], dp[i-1][j]);
        }
    }
    int maxn = -1;
    for(int i = 1; i <= n; i++){
        if(dp[n][i] > maxn) maxn = dp[n][i];
    }
    printf("%d\n", maxn);
    return 0;
}
posted @ 2020-10-31 23:49  LT-Y  阅读(186)  评论(0)    收藏  举报