您的位置:首页 > 其它

POJ 1163 The Triangle (数塔)

2015-10-08 14:05 381 查看

题目大意

一个n层的数塔,从第一层走到最后一层,沿途经过的数的最大值

分析

dp[i][j]表示到达(i , j)时的最大值

状态转方程

dp[i][j] = max(dp[i-1][j-1] , dp[i-1][j]) + a[i][j];


代码

#include <iostream>
#include <cstring>

using namespace std;
const int maxn = 360;
int dp[maxn][maxn]; //dp[i][j]表示到达(i,j)时的最大值
int a[maxn][maxn];

int main()
{
int n;
while(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));

//dp[i][j] = max(dp[i-1][j-1] , dp[i-1][j]) + a[i][j];for(int i = 1; i <= n; i++) for(int j = 1; j <= i; j++)
dp[i][j] = max(dp[i-1][j-1] , dp[i-1][j]) + a[i][j];int ans = dp
[1];
for(int i = 2; i <= n; i++) ans = max(ans , dp
[i]);
cout << ans << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: