题目大意:从三角形顶部数字走,每次只能走到这个数字的左下角或者右下角的数字,直到底部,计算走过的线路的数字之和,求这个和的最大值。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 105;
int dp[MAXN][MAXN], a[MAXN][MAXN];
int main()
{
int n;
while( cin>>n )
{
int i, j;
int ans=0;
for( i=1; i<=n; ++i )
for( j=1; j<=i; ++j )
cin >> a[i][j];
memset( dp, 0, sizeof(dp));
for( i=1; i<=n; ++i )
{
for( j=1; j<=i; ++j )
{
dp[i][j]=max( dp[i-1][j-1], dp[i-1][j] )+a[i][j];
ans=max( ans, dp[i][j] );
}
}
cout<<ans<<endl;
}
return 0;
}
本文讨论了如何使用动态规划解决从三角形顶部数字走到底部,每次只能走到左下角或右下角数字的问题,计算路径上数字之和的最大值。通过实例演示了算法实现,并提供了代码示例。
495

被折叠的 条评论
为什么被折叠?



