金矿问题

Description:

描述:

This is a standard interview problem featured in interview coding rounds of Amazon, Flipkart.

这是亚马逊Flipkart的采访编码回合中的标准采访问题。

Problem statement:

问题陈述:

Given a gold mine of n*m dimensions, each cell in this mine contains a positive integer which is the amount of gold in tons. Initially, the miner is at the first column but can be at any row. He can move only right or right up or right down from the current cell, i.e., the miner can move to the cell diagonally up towards the right or right or diagonally down towards the right. Find out the maximum amount of gold he can collect.

给定一个 n * m尺寸 的金矿,该矿中的每个单元格都包含一个正整数,该黄金数量以吨为单位。 最初,该矿工位于第一列,但可以位于任何行。 他只能从当前牢房向右或向右或向下移动,即,矿工可以向右或向右斜向上或向右斜向向下移动到该牢房。 找出他可以收集的最大数量的黄金。

    Input:
Matrix:
{{1,5,12},
{2,4,4},
{0,6,4}
{3,0,0}	
}
Output: 
18
Input:
Matrix:
{{1,3,1,5},
{2,2,4,1},
{5,0,2,3},
{0,6,11,2}
}
Output: 
25

Explanation with example

举例说明

So, the matrix is:

因此,矩阵为:

Gold Mine Problem (1)

So, the miner starts from the first column (any row) and he has to reach the last row with maximum gold.

因此,矿工从第一列(任意行)开始,他必须以最大的金数到达最后一行。

To make a note, the possible moves from a cell (i,j) is to either of,

要说明一下,从单元格(i,j)可能移动到以下任一位置:

Gold Mine Problem (i)

Now, it seems apparently that greedy may work for the problem that is at the first column pick the cell with maximum value and then move to next best neighbouring cell.

现在,似乎贪婪似乎可以解决以下问题:在第一列中选​​择具有最大值的单元格,然后移至下一个最佳相邻单元格。

If we follow the above greedy approach,

如果我们遵循以上贪婪的方法,

We would pick (3,0) as our starting cell since that contains maximum gold out of the first column. The next best move would be (2,1) and then to (2,2).

我们将(3,0)作为起始单元格,因为它包含第一列中最多的金。 下一个最佳移动是(2,1)然后到(2,2)

So, the total gold collected is = (3+6+4) = 13

因此,收集的总金= (3 + 6 + 4)= 13

Is this the global maximum? Do our local maximum choices lead to global maximum?

这是全球最大值吗? 我们的局部最大选择会导致整体最大吗?

No, it's not the global maximum.

不,这不是全局最大值。

The global maximum path would be: (1,0) ->(0,1)->(0,2)

全局最大路径为: (1,0)->(0,1)->(0,2)

Total coin that can be achieved: (2+5+12) = 19

可以达到的总硬币数: (2 + 5 + 12)= 19

So, the local best choices don't lead to the global best and hence we need dynamic programming.

因此,本地的最佳选择不会导致全球最佳,因此我们需要动态编程。

Solution Approach:

解决方法:

Create a DP matrix of dimension m*n: DP[m][n]

创建尺寸为m * n的DP矩阵: DP [m] [n]

The first column of the DP matrix would be same as the input matrix. Rest of the columns are 0,

DP矩阵的第一列将与输入矩阵相同。 其余列为0,

    for i=0 to n-1
DP[i][0]=arr[i][0];

For the other columns, update DP value for every row. For every cell (i,j) update like following way.

对于其他列,更新每行的DP值。 对于每个单元格(i,j)都按照以下方式进行更新。

Gold Mine Problem (ii)

So, for the earlier input matrix,

因此,对于较早的输入矩阵,

Gold Mine Problem (2)

After completion of the First column (row wise computing),

完成第一列(行计算)后,

Gold Mine Problem (3)

After completion of second column (row wise computation),

完成第二列后(行计算),

Gold Mine Problem (4)

Now find the maximum of the final column, that's the maximum gold that can be collected.

现在找到最后一列的最大值,这就是可以收集的最大黄金量。

Gold Mine Problem (5)

Result=19

结果= 19

C++ implementation:

C ++实现:

#include <bits/stdc++.h>
using namespace std;
int GoldMine(int** arr, int n, int m)
{
//DP table
int DP[n][m];
memset(DP, 0, sizeof(DP));
for (int i = 0; i < n; i++)
DP[i][0] = arr[i][0];
//for every column
for (int j = 1; j < m; j++) {
//check which option is better accordingly
for (int i = 0; i < n; i++) {
//choosing max of possible moves
DP[i][j] = arr[i][j];
int val = DP[i][j - 1];
if (i - 1 >= 0) {
if (val < DP[i - 1][j - 1])
val = DP[i - 1][j - 1];
}
if (i + 1 < n) {
if (val < DP[i + 1][j - 1])
val = DP[i + 1][j - 1];
}
DP[i][j] += val;
}
}
// find the maximum of the last column
int gold = DP[0][m - 1];
for (int i = 1; i < n; i++) {
if (DP[i][m - 1] > gold)
gold = DP[i][m - 1];
}
return gold;
}
int main()
{
int n, item, m;
cout << "Enter matrix dimensions, m & n\n";
cin >> n >> m;
cout << "Input matrix cells\n";
int** arr = (int**)(malloc(sizeof(int*) * n));
//input array
for (int j = 0; j < n; j++) {
arr[j] = (int*)(malloc(sizeof(int) * m));
for (int k = 0; k < m; k++)
cin >> arr[j][k];
}
cout << "Max amount of gold that can be collected: " << GoldMine(arr, n, m) << endl;
return 0;
}

Output

输出量

Enter matrix dimensions, m & n
4 3
Input matrix cells
1 5 12
2 4 4
0 6 4
3 0 0
Max amount of gold that can be collected: 19

翻译自: https://www.includehelp.com/icp/gold-mine-problem.aspx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cesium广告牌_公路广告牌

cesium广告牌Description: 描述&#xff1a; This is a standard dynamic programing problem of finding maximum profits with some constraints. This can be featured in any interview coding rounds. 这是在某些约束条件下找到最大利润的标准动态编程问题。 这可以在任何…

【iCore4 双核心板_FPGA】例程十六:基于双口RAM的ARM+FPGA数据存取实验

实验现象&#xff1a; 核心代码&#xff1a; int main(void) {/* USER CODE BEGIN 1 */int i;int address,data;char error_flag 0;char receive_data[50];char buffer[8];char *p;/* USER CODE END 1 *//* MCU Configuration-----------------------------------------------…

laravel 项目迁移_在Laravel迁移

laravel 项目迁移Before moving forward we need to know some facts about it, 在继续前进之前&#xff0c;我们需要了解一些事实&#xff0c; Resources: In these directories, we have already a js, lang, sass and view page. Where, sass and js file holf their uncom…

[AtCoder-ARC073F]Many Moves

题目大意&#xff1a;   有一排n个格子和2枚硬币。   现在有q次任务&#xff0c;每一次要你把其中一枚硬币移到x的位置上&#xff0c;移动1格的代价是1。   两枚硬币不能同时移动&#xff0c;任务必须按次序完成。   现在告诉你两枚硬币初始状态所在的位置a和b&#xf…

OpenStack —— DevStack一键自动化安装

一、DevStack介绍Devstack目前是支持Ubuntu16.04和CentOS 7&#xff0c;而且Devstack官方建议使用Ubuntu16.04&#xff0c;所以我们使用Ubuntu 16.04进行安装。默认无论是Devstack和OpenStack&#xff0c;都是采用Master的代码进行安装&#xff0c;这样经常会出现&#xff0c;今…

Scala铸造

Scala中的类型 (Types in Scala) Type also know as data type tells the compiler about the type of data that is used by the programmer. For example, if we initialize a value or variable as an integer the compiler will free up 4 bytes of memory space and it wi…

OpenCV探索之路(二十五):制作简易的图像标注小工具

搞图像深度学习的童鞋一定碰过图像数据标注的东西&#xff0c;当我们训练网络时需要训练集数据&#xff0c;但在网上又没有找到自己想要的数据集&#xff0c;这时候就考虑自己制作自己的数据集了&#xff0c;这时就需要对图像进行标注。图像标注是件很枯燥又很费人力物力的一件…

图论 弦_混乱的弦

图论 弦Problem statement: 问题陈述&#xff1a; You are provided an input string S and the string "includehelp". You need to figure out all possible subsequences "includehelp" in the string S? Find out the number of ways in which the s…

「原创」从马云、马化腾、李彦宏的对话,看出三人智慧差在哪里?

在今年中国IT领袖峰会上&#xff0c;马云、马化腾、李彦宏第一次单独合影&#xff0c;同框画面可以说很难得了。BAT关心的走势一直是同行们竞相捕捉的热点&#xff0c;所以三位大Boss在这次大会上关于人工智能的见解&#xff0c;也受到广泛关注与多方解读。马云认为机器比人聪明…

字符串矩阵转换成长字符串_字符串矩阵

字符串矩阵转换成长字符串Description: 描述&#xff1a; In this article, we are going to see how backtracking can be used to solve following problems? 在本文中&#xff0c;我们将看到如何使用回溯来解决以下问题&#xff1f; Problem statement: 问题陈述&#xf…

java awt 按钮响应_Java AWT按钮

java awt 按钮响应The Button class is used to implement a GUI push button. It has a label and generates an event, whenever it is clicked. As mentioned in previous sections, it extends the Component class and implements the Accessible interface. Button类用于…

qgis在地图上画导航线_在Laravel中的航线

qgis在地图上画导航线For further process we need to know something about it, 为了进一步处理&#xff0c;我们需要了解一些有关它的信息&#xff0c; The route is a core part in Laravel because it maps the controller for sending a request which is automatically …

Logistic回归和SVM的异同

这个问题在最近面试的时候被问了几次&#xff0c;让谈一下Logistic回归&#xff08;以下简称LR&#xff09;和SVM的异同。由于之前没有对比分析过&#xff0c;而且不知道从哪个角度去分析&#xff0c;一时语塞&#xff0c;只能不知为不知。 现在对这二者做一个对比分析&#xf…

构建安全网络 比格云全系云产品30天内5折购

一年之计在于春&#xff0c;每年的三、四月&#xff0c;都是个人创业最佳的起步阶段&#xff0c;也是企业采购最火热的时期。为了降低用户的上云成本&#xff0c;让大家能无门槛享受到优质高性能的云服务&#xff0c;比格云从3月16日起&#xff0c;将上线“充值30天内&#xff…

数据结构 基础知识

一。逻辑结构: 是指数据对象中数据 素之间的相互关系。 其实这也是我 今后最需要关注的问题 逻辑结构分为以 四种1. 集合结构 2.线性结构 3.数形结构 4&#xff0c;图形结构 二。物理结构&#xff1a; 1&#xff0c;顺序存储结,2 2. 链式存储结构 一&#xff0c;时间复杂…

ruby 变量类中范围_Ruby中的类

ruby 变量类中范围Ruby类 (Ruby Classes) In the actual world, we have many objects which belong to the same category. For instance, I am working on my laptop and this laptop is one of those laptops which exist around the globe. So, this laptop is an object o…

以云计算的名义 驻云科技牵手阿里云

本文讲的是以云计算的名义 驻云科技牵手阿里云一次三个公司的牵手 可能会改变无数企业的命运 2017年4月17日&#xff0c;对于很多人来说可能只是个平常的工作日&#xff0c;但是对于国内无数的企业来说却可能是个会改变企业命运的日。驻云科技联合国内云服务提供商阿里云及国外…

浏览器端已支持 ES6 规范(包括 export import)

当然&#xff0c;是几个比较优秀的浏览器&#xff0c;既然是优秀的浏览器&#xff0c;大家肯定知道是那几款啦&#xff0c;我就不列举了&#xff0c;我用的是 chrome。 对 script 声明 type 为 module 后就可以享受 es6 规范所带来的模块快感了。 基础语法既然是全支持&#xf…

一文读懂深度学习框架下的目标检测(附数据集)

从简单的图像分类到3D位置估算&#xff0c;在机器视觉领域里从来都不乏有趣的问题。其中我们最感兴趣的问题之一就是目标检测。 如同其他的机器视觉问题一样&#xff0c;目标检测目前为止还没有公认最好的解决方法。在了解目标检测之前&#xff0c;让我们先快速地了解一下这个领…

设计一个应用程序,以在C#中的按钮单击事件上在MessageBox中显示TextBox中的文本...

Here, we took two controls on windows form that are TextBox and Button, named txtInput and btnShow respectively. We have to write C# code to display TextBox’s text in the MessageBox on Button Click. 在这里&#xff0c;我们在Windows窗体上使用了两个控件&…