码迷,mamicode.com
首页 > 其他好文 > 详细

ACM 动态规划 最大路径得分(课上)

时间:2016-04-26 15:57:23      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:

问题:

  给定一个具有N层的数字三角形如下图,从顶至底有多条路径,每一步可沿左斜线向下或沿右斜线向下,路径所经过的数字之和为路径得分,请求出最大路径得分。

             7

            3 8

          8 1 0

         2 7 4 4

        4 5 2 6 5

用到记忆化搜索的方式,可以增加效率,用递归算法太慢了。。。

 

/*
    课上题目
    最大路径得分
*/
# include <iostream>

using namespace std;
const int MAX = 1e4;

int dp[MAX][MAX], a[MAX][MAX];

inline int max(int x,int y)
{
    return x < y ? y : x;
}
int main()
{
    int i, j, n;
    while(cin >> n)
    {
        for(i = 1; i <= n; i++)
            for(j = 1; j <= i; j++)
            cin >> a[i][j];

        // 最后一行
        for(j = 1; j <= n; j++)
            dp[n][j] = a[n][j];

        for(i = n - 1; i >= 1; i--)
            for(j = 1; j <= i; j++)
                dp[i][j] = a[i][j] + max(dp[i + 1][j], dp[i + 1][j + 1]);

        cout << dp[1][1] << endl;
    }
    return 0;
}

 

ACM 动态规划 最大路径得分(课上)

标签:

原文地址:http://www.cnblogs.com/lyf-acm/p/5435188.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!