数字三角形
题目描述
给定一个由n行数字组成的数字三角形试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。
输入
输入数据的第1行是数字三角形的行数n,1≤n≤100。接下来n行是数字三角形各行中的数字。所有数字在0…99之间。
输出
输出数据只有一个整数,表示计算出的最大值。
示例输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
示例输出
30
分析
在输入数组的时候进行数组值计算,因为只能向左或者向右,即现在的位置是从上一层的这个位置左边或者上边进行跳转而来。
#include<iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
//数字三角形
int main(int argc, char const *argv[])
{
int n;
cin>>n;
int a[n+1][n+1];
memset(a, 0, sizeof(a));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <=i; j++)
{
cin>>a[i][j];
a[i][j]+=max(a[i-1][j-1],a[i-1][j]);
}
}
int c=*max_element(a[n],a[n]+n);
cout<<c;
return 0;
}