题目:
观察下面的数字金字塔。写一个程序查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以从当前点走到左下方的点也可以到达右下方的点。

在上面的样例中,从13到8到26到15到24的路径产生了最大的和86。
题解:
如果从第一行开始看,很难看出解法,至少一眼看不出,不过再看一眼也不会爆炸。
所以,从下面开始看。每个节点下面都有两个点。想让这个节点的数值最大,只要从下面的两个节点找到一个最大的就可以了,以此类推。
有更高级的写法,但是本蒟蒻喜欢数组lol...
#include<iostream>
#include<cmath>
using namespace std;
long long ma[1001][1001]={},n,mx=0;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<=i;j++)
cin>>ma[i][j];
for(int i=1;i<=n;i++)
for(int j=0;j<=i;j++)
ma[i][j]+=max(ma[i-1][j-1],ma[i-1][j]);
mx=ma[n][0];
for(int i=0;i<n;i++)
if(ma[n][i]>mx)
mx=ma[n][i];
cout<<mx;
return 0;
}