From 357a5815427523569a9e0de04573af061eeda9af Mon Sep 17 00:00:00 2001 From: taakanksha99 <37452934+aakankshaa23@users.noreply.github.com> Date: Thu, 27 Oct 2022 19:01:13 +0530 Subject: [PATCH] Create Gold mine problem.cpp --- Gold mine problem.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 Gold mine problem.cpp diff --git a/Gold mine problem.cpp b/Gold mine problem.cpp new file mode 100644 index 0000000..d533816 --- /dev/null +++ b/Gold mine problem.cpp @@ -0,0 +1,104 @@ +// C++ program to solve Gold Mine problem +#include + +using namespace std; + + +const int MAX = 100; + +// Returns maximum amount of gold that can be collected +// when journey started from first column and moves +// allowed are right, right-up and right-down + +int getMaxGold(int gold[][MAX], int m, int n) +{ + + // Create a table for storing intermediate results + + // and initialize all cells to 0. The first row of + + // goldMineTable gives the maximum gold that the miner + + // can collect when starts that row + + int goldTable[m][n]; + + memset(goldTable, 0, sizeof(goldTable)); + + + for (int col=n-1; col>=0; col--) + + { + + for (int row=0; row) + + int right = (col==n-1)? 0: goldTable[row][col+1]; + + + // Gold collected on going to the cell to right up (/) + + int right_up = (row==0 || col==n-1)? 0: + + goldTable[row-1][col+1]; + + + // Gold collected on going to the cell to right down (\) + + int right_down = (row==m-1 || col==n-1)? 0: + + goldTable[row+1][col+1]; + + + // Max gold collected from taking either of the + + // above 3 paths + + goldTable[row][col] = gold[row][col] + + + max(right, max(right_up, right_down)); + + + + } + + } + + + // The max amount of gold collected will be the max + + // value in first column of all rows + + int res = goldTable[0][0]; + + for (int i=1; i