// 7
// 3 8
// 8 1 0
// 2 7 4 4
//4 5 2 6 5
#include <iostream>
using namespace std;
int max(int a,int b)
{
if(a>b)
{
return a;
}
return b;
}
int dp(int **arr,int n)
{
if(!(n>=2))
{
return arr[0][0];
}
for(int i=n-2;i>=0;i--)
{
for(int j=0;j<=i;j++)
arr[i][j]+=max(arr[i+1][j],arr[i+1][j+1]);
}
}
return arr[0][0];
}
int main()
{
//5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
int n;//n为高度,边长
cin>>n;
int **arr;
arr=new int*[n];
for(int i=0;i<n;i++)
{
arr[i]=new int[n];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<=i;j++)
{
cin>>arr[i][j];
}
}
cout<<dp(arr,n);
for(int i=0;i<n;i++)
{
delete arr[i];
}
delete arr;
return 0;
}
//在数字等边三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大,路径上的每一步都只能往右下或左下走,只需求出最大和即可,不必给出具体路径
最新推荐文章于 2021-05-23 07:09:13 发布
