Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> प्रोग्रामिंग

गंतव्य तक पहुंचने के लिए न्यूनतम प्रारंभिक बिंदु


किसी दिए गए ग्रिड के ऊपरी-बाएँ कोने से शुरू करने के लिए, किसी को नीचे-दाएँ कोने तक पहुँचना होगा। ग्रिड में प्रत्येक सेल में एक संख्या होती है, संख्या सकारात्मक या नकारात्मक हो सकती है। जब व्यक्ति किसी सेल (i, j) में पहुंचता है तो उसके पास मौजूद टोकन की संख्या उस सेल के मूल्यों के साथ बढ़ाई या घटाई जा सकती है। हमें यात्रा को पूरा करने के लिए न्यूनतम प्रारंभिक टोकन की आवश्यकता है।

कुछ नियम हैं -

  • हम या तो दाईं ओर या नीचे जा सकते हैं।
  • यदि हमारा कुल टोकन (i, j) के मान से कम है, तो हम सेल (i, j) में नहीं जा सकते।
  • हमें न्यूनतम सकारात्मक बिंदुओं के साथ गंतव्य तक पहुंचना है।

इनपुट और आउटपुट

Input:
The token for each room as a matrix.
-2  -3  3
-5 -10  1
10  30 -5

Output:
The minimum token required to start the journey. For this example, the required token is 7.
गंतव्य तक पहुंचने के लिए न्यूनतम प्रारंभिक बिंदु 

एल्गोरिदम

minInitTokens(matrix)

इनपुट: प्रत्येक कमरे के लिए टोकन मैट्रिक्स।

आउटपुट - गंतव्य के प्रारंभ बिंदु तक पहुंचने के लिए आवश्यक न्यूनतम टोकन।

Begin
   define matrix minToken of size same as matrix
   m := number of rows in matrix
   n := number of columns in matrix

   if matrix[m-1, n-1] > 0, then
      minToken[m-1, n-1] := 0
   else
      minToken[m-1, n-1] := 1 + absolute value of matrix[m-1, n-1]

   for i := m-2 down to 0, do
      minToken[i, n-1] := maximum of 1 and (minToken[i+1, n-1]-matrix[i,n-1])
   done

   for j := n-2 down to 0, do
      minToken[m-1, j] := maximum of 1 and (minToken[m-1, j+1]-matrix[m-1, j])
   done

   for i := m-2 down to 0, do
      for j := n-2 down to 0, do
         rem := minimum of minToken[i+1, j] and minToken[i, j+1]
         minPoint[i, j] := maximum of 1 and (rem – matrix[i,j])
      done
   done

   return minToken[0, 0]
End

उदाहरण

#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 << "Minimum Points Required: " << minInitPoints();
}

आउटपुट

Minimum Points Required: 7

  1. C++ में जॉब शेड्यूल की न्यूनतम कठिनाई

    मान लीजिए कि हम d दिनों में कार्यों की एक सूची शेड्यूल करना चाहते हैं। कार्य निर्भर हैं इसलिए i-th कार्य पर काम करने के लिए, हमें सभी कार्यों को पूरा करना होगा जहां 0 <=j

  1. सी ++ में एक लाइन पर मैक्स पॉइंट्स

    मान लीजिए कि हमारे पास 2D प्लेन है। हमें एक ही सीधी रेखा पर रहने वाले बिंदुओं की अधिकतम संख्या ज्ञात करनी है। तो अगर अंक इस तरह हैं - फिर 4 अंक होते हैं इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n :=अंकों की संख्या, यदि n <3 है, तो n लौटाएं उत्तर :=2 मैं के लिए 1 से n - 1 की सीमा

  1. पायथन में गंतव्य तक पहुंचने के लिए न्यूनतम संख्या में ऊंचाई बढ़ाने का कार्यक्रम

    मान लीजिए कि हमारे पास एक मैट्रिक्स एम है जहां एम [आर] [सी] उस सेल की ऊंचाई का प्रतिनिधित्व करता है। अगर हम वर्तमान में ऊपरी बाएँ कोने में हैं और नीचे दाएँ कोने में जाना चाहते हैं। हम आसन्न कोशिकाओं (ऊपर, नीचे, बाएँ, दाएँ) में तभी जा सकते हैं जब उस आसन्न कोशिका की ऊँचाई वर्तमान कोशिका की ऊँचाई से कम