题目:
问题描述:给定一个由n行数字组成的数字三角形,如下图所示
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
如上图最大值为30=7+3+8+7+5
代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a[110][110],dp[110][110];
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
cin>>a[i][j];
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+a[i][j];
int ans=0;
for(int j=1;j<=n;j++)
ans=max(ans,dp[n][j]);
cout<<ans<<endl;
return 0;
}
测试数据:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出:30