POJ 1163 The Triangle (数塔)

来源:互联网 发布:男士 羽绒服推荐 知乎 编辑:程序博客网 时间:2024/06/04 20:09

题目大意

  • 一个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[n][1];        for(int i = 2; i <= n; i++) ans = max(ans , dp[n][i]);        cout << ans << endl;    }    return 0;}
0 0
原创粉丝点击