What are the Minimum Initial Points to Reach Destination ?



What are the Minimum Initial Points to Reach Destination ?

  • To begin from the upper left corner of a given framework, one needs to achieve the base right corner.
  • Every cell in the grid contains a number, the number may positive or negative.
  • We can move across a cell only if we have positive points ( > 0 ). Whenever we pass through a cell, points in that cell are added to our overall points.
  • We need to find minimum initial points to reach cell (m-1, n-1) from (0, 0) by following these certain set of rules :
    • From a cell (i, j) we can move to (i+1, j) or (i, j+1).
    • We cannot move from (i, j) if your overall points at (i, j) is <= 0.
    • We have to reach at (n-1, m-1) with minimum positive points i.e., > 0.

Syntax

minInitTokens(matrix) 

Sample Code in C++

#include<iostream>
#include<cmath>
#define ROW 3
#define COL 3
using namespace std;

int tokens[ROW][COL] = {
   {-2,-3,3},
   {-5,-10,1},
   {10,30,-5}
};

int max(int a, int b) {
   return (a>b)?a:b;
}

int minInitPoints() {
   int minToken[ROW][COL];
   int m = ROW, n = COL;
   
   minToken[m-1][n-1] = tokens[m-1][n-1] > 0? 1: abs(tokens[m-1][n-1]) + 1;
   
   for (int i = m-2; i >= 0; i--)    //from last row to first row, fill points
      minToken[i][n-1] = max(minToken[i+1][n-1] - tokens[i][n-1], 1);
   
   for (int j = n-2; j >= 0; j--)    //fill last column to first column, fill points
      minToken[m-1][j] = max(minToken[m-1][j+1] - tokens[m-1][j], 1);

   for (int i=m-2; i>=0; i--) {
      for (int j=n-2; j>=0; j--) {
         int remPoint = min(minToken[i+1][j], minToken[i][j+1]);    //calculate remaining points
         minToken[i][j] = max(remPoint - tokens[i][j], 1);
      }
   }
   return minToken[0][0];
}

int main() {
   cout << "Least Points Required: " << minInitPoints();
}

Output

Least Points Required: 7

Related Searches to What are the Minimum Initial Points to Reach Destination ?