算法分析:
1.创建两个数组,一用作输入(下层),一用于复制(上层)
(1)第一层时,直接输入进temp数组
(2)大于第一层,输入arr数组
1.(讨论端点情况)
2.下层元素对两父点时,取最大的父点
(因为,要求找的是最大,较小的没有意义)(有点类似生成树)
(3)复制temp数组,并找arr中最大值
最后输出即可
完整代码
#include<iostream>
using namespace std;
int temp[109] = { 0 };
int arr[109] = { 0 };
int main()
{
int num; cin >> num;
while (num--)
{
int n,fl=1,max=-1; cin >> n;
while (n--)
{
if (fl == 1) { cin >> temp[0]; fl++; }
else {
for (int i = 0,k=0; i < fl; i++)
{
cin >> arr[i];
if (i == 0)
arr[i] += temp[i];
else if (i == fl - 1)
arr[i] += temp[fl - 2];
else
arr[i] += (temp[i - 1] > temp[i] ? temp[i - 1] : temp[i]);
if (i > 0) temp[k++] = arr[i - 1];
if (i == fl - 1) temp[k] = arr[i];
if (arr[i] > max)max = arr[i];
}
fl++;
}
}cout << max << endl;
}
return 0;
}