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

पायथन में बुककेस अलमारियों को भरना

मान लीजिए कि हमारे पास पुस्तकों का एक क्रम है - यहाँ i-th पुस्तक में मोटाई की पुस्तकें[i][0] और ऊँचाई वाली पुस्तकें[i][1] हैं। अगर हम इन किताबों को उन बुकशेल्फ़ पर रखना चाहते हैं जिनकी कुल चौड़ाई शेल्फ_चौड़ाई है। अगर हम इस शेल्फ पर रखने के लिए कुछ किताबें चुनते हैं (जैसे कि उनकी मोटाई का योग <=शेल्फ_चौड़ाई है), तो बुककेस के शेल्फ का एक और स्तर बनाएं जहां किताबों की अलमारी की कुल ऊंचाई अधिकतम ऊंचाई से बढ़ गई है किताबें हम नीचे रख सकते हैं। हम इस प्रक्रिया को तब तक दोहराते रहेंगे जब तक कि कोई और किताबें न हों। हमें यह ध्यान रखना होगा कि उपरोक्त प्रक्रिया के प्रत्येक चरण में हम जिस क्रम में पुस्तकों को रखते हैं, वही क्रम पुस्तकों के दिए गए क्रम का होता है। इस तरह से अलमारियों को रखने के बाद हमें न्यूनतम संभव ऊंचाई का पता लगाना होगा जो कुल बुकशेल्फ़ हो सकती है। तो अगर इनपुट की तरह है - [[1,1], [2,3], [2,3], [1,1], [1,1], [1,1], [1,2]] , और स्वयं_चौड़ाई =4,

पायथन में बुककेस अलमारियों को भरना

तो आउटपुट 6 होगा क्योंकि 3 अलमारियों की ऊंचाई का योग 1 + 3 + 2 =6 है। ध्यान दें कि पुस्तक संख्या 2 को पहले शेल्फ पर नहीं होना चाहिए।

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

  • एक सरणी डीपी बनाएं जिसका आकार किताबों के समान हो, और इसे अनंत का उपयोग करके भरें
  • dp[0] :=किताबें[0,1]
  • 1 से लेकर किताबों की लंबाई तक के लिए - 1
    • curr_height:=0
    • अस्थायी:=self_width
    • j :=i
    • जबकि j>=0 और अस्थायी - किताबें[j, 0]>=0, do
      • curr_height :=ज़्यादा से ज़्यादा किताबें[j, 1], curr_height
      • dp[i] :=min of dp[i], curr_height + (dp[j-1] अगर j – 1>=0, अन्यथा 0)
      • अस्थायी:=अस्थायी - किताबें[j, 0]
      • j को 1 से घटाएं
  • dp का अंतिम तत्व लौटाएं

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

उदाहरण

class Solution(object):
   def minHeightShelves(self, books, shelf_width):
      """
      :type books: List[List[int]]
      :type shelf_width: int
      :rtype: int
      """
      dp = [float('inf') for i in range(len(books))]
      dp[0] = books[0][1]
      for i in range(1,len(books)):
         current_height = 0
         temp = shelf_width
         j = i
         while j>=0 and temp-books[j][0]>=0:
            current_height = max(books[j][1],current_height)
            dp[i] = min(dp[i],current_height +( dp[j-1] if j-1 >=0 else 0))
            temp-=books[j][0]
            j-=1
         #print(dp)
      return dp[-1]

इनपुट

[[1,1],[2,3],[2,3],[1,1],[1,1],[1,1],[1,2]]
4

आउटपुट

6

  1. Matplotlib का उपयोग करके पायथन में वक्र और X-अक्ष के बीच के क्षेत्र को भरना

    Matplotlib का उपयोग करके Python में एक वक्र और X-अक्ष के बीच के क्षेत्र को भरने के लिए, हम निम्नलिखित कदम उठा सकते हैं कदम फिगर साइज सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग को एडजस्ट करें। बनाएं x और y डेटा अंक numpy का उपयोग कर रहे हैं। x . को प्लॉट करें और y साजिश () . का उपयोग करके

  1. issuperset () पायथन में

    इस लेख में, हम पायथन में issuperset() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे। यह विधि बूलियन ट्रू लौटाती है यदि एक सेट बी के सभी तत्वों में सभी तत्व सेट ए होते हैं जो एक तर्क के रूप में पारित होते हैं और यदि ए के सभी तत्व बी में मौजूद नहीं होते हैं तो झूठा रिटर्न देता है। इस

  1. मैं पायथन का उपयोग करके स्ट्रिंग के साथ संख्या को कैसे बदल सकता हूं?

    इस उद्देश्य के लिए आइए हम एक डिक्शनरी ऑब्जेक्ट का उपयोग करें जिसमें अंक कुंजी के रूप में हों और इसका शब्द प्रतिनिधित्व मान के रूप में - dct={'0':'zero','1':'one','2':'two','3':'three','4':'four',      '