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