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

腾讯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++的参考代码如下:

#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;
}

程序运行结果:

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

    原文作者:动态规划
    原文地址: https://blog.csdn.net/xubinlxb/article/details/51049529
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞