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

पायथन में घटती-मूल्य वाली रंगीन गेंदों को बेचकर अधिकतम लाभ प्राप्त करने का कार्यक्रम

मान लीजिए कि हमारे पास एक सरणी है, जिसे इन्वेंट्री कहा जाता है, जहां इन्वेंट्री [i] शुरू में हमारे पास ith रंग की गेंदों की संख्या का प्रतिनिधित्व करती है। हमारे पास ऑर्डर नामक एक मूल्य भी है, जो ग्राहकों की कुल गेंदों की संख्या का प्रतिनिधित्व करता है। हम गेंदों को किसी भी क्रम में बेच सकते हैं। हमारी सूची में अलग-अलग रंग की गेंदें हैं, ग्राहक किसी भी रंग की गेंद चाहते हैं। अब गेंदों के मूल्य प्रकृति में विशेष हैं। प्रत्येक रंगीन गेंद का मूल्य हमारी सूची में उस रंग की गेंदों की संख्या है। इसलिए यदि हमारे पास वर्तमान में 6 नीली गेंदें हैं, तो ग्राहक पहली नीली गेंद के लिए 6 का भुगतान करेगा। फिर केवल 5 नीली गेंदें बची हैं, इसलिए अगली नीली गेंद का मूल्य 5 है। हमें वह अधिकतम कुल मूल्य ज्ञात करना है जो हमें रंगीन गेंदों को बेचने के बाद प्राप्त हो सकता है। अगर उत्तर बहुत बड़ा है, तो इसे मॉड्यूलो 10^9 + 7 लौटाएं।

इसलिए, यदि इनपुट इन्वेंट्री की तरह है =[5,7], ऑर्डर =6, तो आउटपुट 31 होगा क्योंकि हम पहली रंगीन गेंद को दो बार कीमत (5,4), और दूसरी रंगीन गेंदों को 4 बार (7 बार) बेच सकते हैं। ,6,5,4), तो कुल लाभ 5+4+7+6+5+4 =31

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

  • निम्न :=0, उच्च :=10000000

  • जबकि कम <उच्च, करें

    • मध्य :=भागफल (निम्न + उच्च)/2

    • एस:=0

    • सूची में प्रत्येक i के लिए, करें

      • अगर मैं> मध्य, तो

        • s :=s + i - मध्य

    • अगर s> आदेश, तो

      • कम :=मध्य + 1

    • अन्यथा,

      • उच्च :=मध्य

  • मध्य :=भागफल (निम्न + उच्च)/2

  • उत्तर :=0

  • सूची में प्रत्येक i के लिए, करें

    • अगर मैं> मध्य, तो

      • उत्तर :=उत्तर + (i*(i+1)/2) का भागफल - (मध्य*(मध्य+1)/2) का भागफल

      • आदेश:=आदेश - मैं-मध्य

  • उत्तर:=उत्तर + आदेश * मध्य

  • वापसी उत्तर मोड (10^9 + 7)

उदाहरण

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

def solve(inventory, orders):
   low = 0
   high = 10000000

   while low < high:
      mid = (low+high)//2

      s = 0
      for i in inventory:
         if i > mid:
            s += i-mid

      if s > orders:
         low = mid+1
      else:
         high = mid


   mid = (low+high)//2

   ans = 0
   for i in inventory:
      if i > mid:
         ans += i*(i+1)//2 - mid*(mid+1)//2
         orders -= i-mid

   ans += orders*mid
   return ans % (10**9 + 7)

inventory = [5,7]
orders = 6
print(solve(inventory, orders))

इनपुट

[6,8,7,11,5,9], [0,0,2], [2,3,5]

आउटपुट

31

  1. - पायथन में समान लंबाई के k रिबन की अधिकतम लंबाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास सकारात्मक संख्याओं की एक सूची है, जो रिबन की लंबाई का प्रतिनिधित्व करती है और एक मान k भी है। हम जितनी बार चाहें रिबन काट सकते हैं, हमें सबसे बड़ी लंबाई r ढूंढनी होगी जैसे कि हमारे पास लंबाई r के k रिबन हो सकें। अगर हमें ऐसा समाधान नहीं मिल रहा है, तो -1 पर लौटें। इसलिए, यदि

  1. - पायथन में लाभ को धारण और बेचकर हम अधिकतम लाभ प्राप्त करने का कार्यक्रम कर सकते हैं

    मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, जो कालानुक्रमिक क्रम में किसी कंपनी के स्टॉक की कीमतों का प्रतिनिधित्व कर रहा है। हम प्रति दिन स्टॉक के अधिकतम एक शेयर खरीद सकते हैं, लेकिन आप कई शेयरों पर पकड़ बना सकते हैं और किसी भी दिन स्टॉक बेच सकते हैं। वह अधिकतम लाभ लौटाएं जो

  1. पायथन में अधिकतम भवन ऊंचाई खोजने का कार्यक्रम पायथन में अधिकतम भवन ऊंचाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक मान n है और जोड़े की एक और सूची है जिसे प्रतिबंध कहा जाता है। हम एक शहर में नई इमारतें बनाना चाहते हैं। लेकिन कुछ प्रतिबंध हैं। हम एक लाइन में बना सकते हैं और इमारतों को 1 से n तक लेबल किया जाता है। प्रतिबंधों के दो पैरामीटर हैं, इसलिए प्रतिबंध [i] =(id_i, max_height_i) इंग