题目大意:从三角形顶部数字走,每次只能走到这个数字的左下角或者右下角的数字,直到底部,计算走过的线路的数字之和,求这个和的最大值。
#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;
}