#include <iostream>
#include <bits/stdc++.h>
using namespace std;
const int N=110;
int n;
int a[N][N];
int f[N][N];
int main()
{
scanf("%d",&n);
//1.输入图形
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
scanf("%d",&a[i][j]);
//2.情形1
f[1][1]=a[1][1];
//3.开始遍历
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
//4.情形2:左边球
if(j==1)
f[i][j]=f[i-1][j]+a[i][j];
//5.情形3:右边球
else if(i==j) f[i][j]=f[i-1][j-1]+a[i][j];//分成三种情况讨论
//6.情形4:中间球
else f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];
}
}
//5.对步数进行判断
if(n%2==1) cout<<f[n][n/2+1];
else cout<<max(f[n][n/2],f[n][n/2+1]);
找规律发现如果n为奇数时,最后必然走到最后行最中间的数,如果为偶数,则取中间两个数的最大值,
//因为向左下走的次数与向右下走的次数相差不能超过 1
return 0;
}
蓝桥杯-数字三角形
最新推荐文章于 2024-07-11 23:38:50 发布