剑指offerr——47.礼物的最大价值

/*
*@剑指offer 
*@47.礼物的最大价值 
*@edited by ryunin
*@date:2019/04/26
// 面试题47:礼物的最大价值
// 题目:在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值
// (价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或
// 者向下移动一格直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计
// 算你最多能拿到多少价值的礼物?
*/

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
	int maxValue(vector<vector<int>> &vec)
	{
		vector<vector<int>> maxVal(4, vector<int>(4)); //二维vector的初始化 
		int rows = vec[0].size();
		int cols = vec.size();
		int boundR = 0; //上边界 
		int boundC = 0; //左边界 
		for(int i = 0;i<rows;i++)
		{
			for(int j = 0;j<cols;j++)
			{
				int spy0 = maxVal[0][0];
				if(i == 0)
				{
					if(j == 0)
					{
						boundR = vec[0][0];
						boundC = vec[0][0];
						maxVal[0][0] = boundR;
						continue;
					}
					else
					{
						boundR += vec[0][j];
						maxVal[0][j] = boundR;
						continue;
					}
				}
				if(j == 0)
				{
					boundC += vec[i][0];
					maxVal[i][0] = boundC;
					continue;
				}
				int spy = max(maxVal[i][j-1],maxVal[i-1][j]);
				maxVal[i][j] = max(maxVal[i][j-1],maxVal[i-1][j])+vec[i][j];
			}
		}
		for(int i = 0;i<rows;i++)
		{
			for(int j = 0;j<cols;j++)
			{
				cout<<maxVal[i][j]<<endl;
			}
		}
		return maxVal[rows - 1][cols - 1];
	}
		
};


int main()
{
	vector<vector<int>> vecs = {{1,10,3,8},{12,2,9,6},{5,7,4,11},{3,7,16,5}};
	cout<<Solution().maxValue(vecs)<<endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值