懵懂的菜鸟

Stay hungry,Stay foolish.

导航

动态规划---从左上角到右下角的价值最大的路径

编程题:动态规划---从左上角到右下角的价值最大的路径

腾讯2016年4月2号暑假实习移动开发岗的笔试题,编程题第一题大概题目是:

 

一个m*n的矩阵,只能向右走或是向下走,矩阵每一个元素代表一个财富值,要求打印出从左上角到右下角走的财富最大总值。

如输入m=4 ,n=5,

输入矩阵value=

{ 0 0 7 0 0,

  0 0 0 5 0,

  2 0 4 0 0,

  0 0 0 3 0},

打印出最大财富总值是15。

 

这是动态规划的题目,跟“[leetcode 64] Minimum Path Sum------从左上角到右下角的最小路径值”的思路是一样的,


C++的参考代码如下:

编程题:动态规划---从左上角到右下角的价值最大的路径
原创 2016年04月03日 14:55:14 247611
腾讯2016年4月2号暑假实习移动开发岗的笔试题,编程题第一题大概题目是:

一个m*n的矩阵,只能向右走或是向下走,矩阵每一个元素代表一个财富值,要求打印出从左上角到右下角走的财富最大总值。
 如输入m=4 ,n=5,
输入矩阵value=
{ 0 0 7 0 00 0 0 5 0,
  2 0 4 0 0,
  0 0 0 3 0},
打印出最大财富总值是15。
这是动态规划的题目,跟“[leetcode 64] Minimum Path Sum------从左上角到右下角的最小路径值”的思路是一样的,


C++的参考代码如下:
[cpp] view plain copy
#include <iostream>  
#include <cstdio>  
#include <algorithm>  
  
using namespace std;  
  
int value[1024][1024];  
  
int main()  
{  
    int m, n;  
    scanf_s("%d%d", &m, &n);  
  
    //输入矩阵  
    for (int i = 0; i < m; ++i)  
    {  
        for (int j = 0; j < n; ++j)  
        {  
            scanf_s("%d", &value[i][j]);  
        }  
    }  
  
    //计算  
    for (int i = 1; i < m; ++i)  
    {  
        value[i][0] += value[i - 1][0];  
    }  
    for (int j = 1; j < n; ++j)  
    {  
        value[0][j] += value[0][j - 1];  
    }  
    for (int i = 1; i < m; ++i)  
    {  
        for (int j = 1; j < n; ++j)  
        {  
            value[i][j] += max(value[i - 1][j], value[i][j - 1]);  
        }  
    }  
  
    ////打印调试  
    //for (int i = 0; i < m; ++i)  
    //{  
    //  for (int j = 0; j < n; ++j)  
    //  {  
    //      cout << value[i][j] << " ";  
    //  }  
    //  cout << endl;  
    //}  
    //cout << endl;  
  
    cout << value[m - 1][n - 1] << endl;  
  
    return 0;  
}  

 

 

posted on 2017-09-10 20:57  懵懂的菜鸟  阅读(2483)  评论(0编辑  收藏  举报