-
Description
-
如下图左边所示为一个数字三角形,也叫数塔
请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。
1.一步可沿左斜线向下或右斜线向下走;
2.三角形行数小于等于100;
3.三角形中的数字为0,1,…,99;
一个n层的数塔对应的输入为n+1行,如下图右边所示格式,第1行为数塔层数,第2行到第n+1行为各层的数字。

-
Input
-
输入为n+1行的数字,意义见题目描述
-
Output
-
输出为一个整数,即题意所述最大的那个路径数字总和
-
Sample Input 1
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
-
Sample Output 1
30
-
代码部分:
#include <stdio.h>
#define MaxNum 100
int n;
int data[MaxNum][MaxNum];
int op[MaxNum][MaxNum];
int maxnum(int a,int b){
if(a>=b){
return a;
}
else{
return b;
}
}
int tower(){
for(int j=0;j<n;j++){
op[n-1][j] = data[n-1][j];
// printf("%d",op[n-1][j]);
}
for(int i=n-2;i>=0;i--){
for(int j=0;j<i+1;j++){
op[i][j] = maxnum(op[i+1][j],op[i+1][j+1]) + data[i][j];
}
}
return op[0][0];
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
for(int j=0;j<i+1;j++){
scanf("%d",&data[i][j]);
}
}
printf("%d",tower());
return 0;
}
340

被折叠的 条评论
为什么被折叠?



