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

C++ में अधिकतम अवकाश दिवस

मान लीजिए कि एक कंपनी अपने सबसे अच्छे कर्मचारियों में से एक को कुछ संसाधनों को इकट्ठा करने के लिए एन शहरों के बीच यात्रा करने का विकल्प देना चाहती है। लेकिन कर्मचारी कुछ छुट्टियां भी चाहते हैं, हम कुछ खास शहरों और हफ्तों में छुट्टियां ले सकते हैं। हमारा काम यात्रा को शेड्यूल करना है ताकि हम छुट्टी के दिनों की संख्या को अधिकतम कर सकें, लेकिन कुछ नियम और प्रतिबंध हैं जिनका हमें पालन करना होगा।

  • हम केवल N शहरों के बीच यात्रा कर सकते हैं; उन्हें 0 से N-1 तक अनुक्रमित द्वारा दर्शाया जाता है। सबसे पहले, हम सोमवार को 0 अनुक्रमित शहर में हैं।

  • ये शहर उड़ानों से जुड़े हुए हैं। उड़ानों का प्रतिनिधित्व करने के लिए हमारे पास एक एन एक्स एन मैट्रिक्स (जरूरी नहीं कि सममित) है। शहर i से शहर j तक एयरलाइन की स्थिति का प्रतिनिधित्व करने वाली उड़ानें। यदि शहर i से शहर j के लिए कोई उड़ान नहीं है, तो मैट्रिक्स उड़ानें[i][j] 0 होगी; अन्यथा, उड़ानें[i][j] =1. साथ ही, सभी i के लिए उड़ानें[i][i] =0।

  • हमारे पास यात्रा करने के लिए K सप्ताह हैं। हम प्रति दिन केवल एक बार उड़ान भर सकते हैं और केवल प्रत्येक सप्ताह के सोमवार की सुबह उड़ान भर सकते हैं।

  • प्रत्येक शहर के लिए, हमारे पास अलग-अलग सप्ताहों में केवल अवकाश के दिनों को प्रतिबंधित किया जा सकता है, इसके लिए हमारे पास एक N*K मैट्रिक्स है जिसे दिन कहा जाता है जो इस संबंध को दिखा रहा है। दिनों के मूल्य के लिए [i] [j], यह उस अधिकतम दिनों को दर्शाता है जब हम शहर में सप्ताह में छुट्टी ले सकते हैं।

इसलिए यदि हमारे पास फ़्लाइट मैट्रिक्स और दिनों का मैट्रिक्स है, और हमें K सप्ताह के दौरान अधिकतम छुट्टी के दिनों को आउटपुट करने की आवश्यकता है।

इसलिए, यदि इनपुट उड़ानों की तरह है =[[0,1,1], [1,0,1], [1,1,0]], दिन =[[1,3,1], [6,0 ,3],[3,3,3]], तो आउटपुट 12 होगा

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

  • n :=उड़ानों की पंक्तियाँ

  • मी :=दिनों मैट्रिक्स के कॉलम

  • एक 2D सरणी dp आकार (m + 1) x n

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

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

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

        • यदि j, k के समान है या उड़ानें[j, k] शून्य नहीं है, तो -

          • dp[i, j] :=अधिकतम dp[i, j] और दिन[j, i] + dp[i + 1, k]

  • रिट:=डीपी [0, 0]

  • इनिशियलाइज़ करने के लिए मैं :=1, जब i

    • अगर उड़ानें [0, i] शून्य नहीं हैं, तो -

      • ret :=अधिकतम रिट और dp[0, i]

  • वापसी रिट

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxVacationDays(vector<vector<int>>& flights, vector<vector<int>>& days) {
      int n = flights.size();
      int m = days[0].size();
      vector<vector<int> > dp(m + 1, vector<int>(n));
      for (int i = m - 1; i >= 0; i--) {
         for (int j = 0; j < n; j++) {
            for (int k = 0; k < n; k++) {
               if (j == k || flights[j][k]) {
                  dp[i][j] = max(dp[i][j], days[j][i] + dp[i + 1][k]);
               }
            }
         }
      }
      int ret = 0;
      ret = dp[0][0];
      for (int i = 1; i < n; i++) {
         if (flights[0][i]) {
            ret = max(ret, dp[0][i]);
         }
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v1 = {{0,1,1},{1,0,1},{1,1,0}}, v2 = {{1,3,1},{6,0,3},{3,3,3}};
   cout << (ob.maxVacationDays(v1, v2));
}

इनपुट

v1 = {{0,1,1},{1,0,1},{1,1,0}}, v2 = {{1,3,1},{6,0,3},{3,3,3}}

आउटपुट

12

  1. सी++ में अधिकतम गैप

    मान लीजिए कि हमारे पास एक सरणी है, जिसे क्रमबद्ध नहीं किया गया है। हमें क्रमबद्ध रूप में क्रमिक तत्वों के बीच अधिकतम अंतर ज्ञात करना है। यदि सरणी में 2 से कम तत्व हैं तो हम 0 लौटाएंगे। तो अगर सरणी [12,3,9,1,17] की तरह है, तो आउटपुट 6 होगा, क्योंकि क्रमबद्ध सरणी [1,3,9,12,17] होगी, इसलिए 5 अधिकतम अंत

  1. सी ++ में अधिकतम चौड़ाई रैंप

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी A है, एक रैंप एक टपल (i, j) है जिसके लिए i

  1. C++ . में चतुर्भुज का अधिकतम क्षेत्रफल

    समस्या कथन चतुर्भुज a, b, c, d की चार भुजाओं को देखते हुए दी गई भुजाओं से चतुर्भुज का अधिकतम क्षेत्रफल ज्ञात कीजिए। एल्गोरिदम इस समस्या को हल करने के लिए हम नीचे ब्रह्मगुप्त के सूत्र का उपयोग कर सकते हैं - (s-a)(s-b)(s-c)(s-d) उपरोक्त सूत्र में s अर्ध-परिधि है। इसकी गणना इस प्रकार की जाती है -