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

सी++ में जंप गेम वी


मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है जिसे arr और एक पूर्णांक d कहा जाता है। एक चरण में हम इंडेक्स i से −

. पर जा सकते हैं
  • i + x जहां:i + x

  • i - x जहां:i - x>=0 और x 1 से d की श्रेणी में।

यहाँ n सरणी का आकार है। इसके अलावा, हम केवल इंडेक्स i से इंडेक्स j पर कूद सकते हैं जब arr[i]> arr[j] और arr[i]> arr[k] i और j के बीच सभी इंडेक्स k के लिए। हम सरणी के किसी भी सूचकांक को चुन सकते हैं और कूदना शुरू कर सकते हैं। हमें अधिकतम संख्या में सूचकांकों का पता लगाना है जिन पर हम जा सकते हैं।

इसलिए, यदि इनपुट d =2 जैसा है और ऊंचाई समान है

सी++ में जंप गेम वी

तो आउटपुट 4 होगा, हम इंडेक्स 10 से शुरू कर सकते हैं। हम इंडेक्स 10 से कूद सकते हैं -> 8 -> 6 -> 7 जैसा कि दिखाया गया है। इसलिए यदि हम इंडेक्स 6 से शुरू करते हैं तो हम केवल इंडेक्स 7 पर जा सकते हैं। हम इंडेक्स 5 पर नहीं जा सकते क्योंकि 13> 9। हम इंडेक्स 4 पर नहीं जा सकते क्योंकि इंडेक्स 5 इंडेक्स 4 और 6 और 13> 9 के बीच है। और साथ ही, हम अनुक्रमणिका 3 से अनुक्रमणिका 2 या अनुक्रमणिका 1 पर नहीं जा सकता।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक सरणी dp परिभाषित करें

  • फ़ंक्शन को हल करें () को परिभाषित करें, यह एक सरणी गिरफ्तारी, idx, d,

    लेगा
  • अगर dp[idx] -1 के बराबर नहीं है, तो -

    • वापसी डीपी [आईडीएक्स]

  • रिट :=1

  • n :=गिरफ्तारी का आकार

  • इनिशियलाइज़ i :=idx + 1 के लिए, जब i

    • अगर मैं> idx + d, तो −

      • लूप से बाहर आएं

    • अगर arr[i]>=arr[idx], तो −

      • लूप से बाहर आएं

    • ret :=अधिकतम रिट और 1 + हल करें(arr, i, d)

  • इनिशियलाइज़ करने के लिए i :=idx-1, जब i>=0, अपडेट करें (i से 1 घटाएं), −

    करें
    • अगर मैं

      • लूप से बाहर आएं

    • अगर arr[i]>=arr[idx], तो −

      • लूप से बाहर आएं

    • ret :=अधिकतम रिट और 1 + हल करें(arr, i, d)

  • डीपी [आईडीएक्स]:=सेवानिवृत्त

  • वापसी रिट

  • मुख्य विधि से निम्न कार्य करें -

  • n :=गिरफ्तारी का आकार

  • dp :=आकार n की एक सरणी को परिभाषित करें और इसे -1 से भरें

  • रिट :=1

  • इनिशियलाइज़ i :=0 के लिए, जब i

    • रिट :=अधिकतम रिट और सॉल्व (गिरफ्तारी, आई, डी)

  • वापसी रिट

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   vector<int> dp;
   int solve(vector <int>& arr, int idx, int d){
      if (dp[idx] != -1)
      return dp[idx];
      int ret = 1;
      int n = arr.size();
      for (int i = idx + 1; i < n; i++) {
         if (i > idx + d)
         break;
         if (arr[i] >= arr[idx])
         break;
         ret = max(ret, 1 + solve(arr, i, d));
      }
      for (int i = idx - 1; i >= 0; i--) {
         if (i < idx - d)
         break;
         if (arr[i] >= arr[idx])
         break;
         ret = max(ret, 1 + solve(arr, i, d));
      }
      return dp[idx] = ret;
   }
   int maxJumps(vector<int>& arr, int d) {
      int n = arr.size();
      dp = vector<int>(n, -1);
      int ret = 1;
      for (int i = 0; i < n; i++) {
         ret = max(ret, solve(arr, i, d));
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {6,4,14,6,8,13,9,7,10,6,12};
   cout << (ob.maxJumps(v, 2));
}

इनपुट

{6,4,14,6,8,13,9,7,10,6,12}, 2

आउटपुट

4

  1. सी++ में जंप गेम IV

    मान लीजिए कि हमारे पास arr नामक पूर्णांकों की एक सरणी है। हम शुरुआत में इंडेक्स 0 पर हैं। एक चरण में हम इंडेक्स i से i + x पर जा सकते हैं जहां:i + x =0. j जहां:arr[i] और arr[j] समान हैं और i और j समान नहीं हैं। यहाँ n सरणी का आकार है। सरणी के अंतिम सूचकांक तक पहुंचने के लिए हमें न्यूनतम चरणों की संख

  1. पायथन में जंप गेम II

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है, जहां सभी तत्व धनात्मक हैं। प्रारंभिक प्रारंभिक बिंदु सूचकांक 1 पर है। सरणी में प्रत्येक तत्व उस स्थिति में हमारी अधिकतम छलांग लंबाई का प्रतिनिधित्व करता है। हमारा लक्ष्य कम संख्या में छलांग के साथ अंतिम सेल तक पहुंचना है। तो अगर सरणी [2,3,1,1,4] की तर

  1. पायथन में जंप गेम

    मान लीजिए कि हमारे पास गैर-ऋणात्मक पूर्णांकों की एक सरणी है; हम शुरू में सरणी के पहले सूचकांक में स्थित हैं। दिए गए सरणी में प्रत्येक तत्व उस स्थिति में अधिकतम छलांग लंबाई का प्रतिनिधित्व करता है। हमें यह तय करना होगा कि हम अंतिम सूचकांक तक पहुंच पाते हैं या नहीं। तो यदि सरणी [2,3,1,1,4] की तरह है,