数塔问题
题目描述
数字三角形。如下所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。
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;
}
没有未来的未来不是我想要的未来

浙公网安备 33010602011771号