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

पायथन में निष्कासन से अधिकतम अंक खोजने का कार्यक्रम


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

इसलिए, यदि इनपुट nums =[4, 4, 6, 4, 4] जैसा है, तो आउटपुट 17 होगा।

आउटपुट के लिए, हम पहले 6 को हटा सकते हैं जिसकी लंबाई 1 है और पैदावार 1 * 1 =1 अंक है। फिर हम सूची [4, 4, 4, 4] ले सकते हैं जिसकी लंबाई 4 है और 4 * 4 =16 अंक प्राप्त होते हैं। तो अंत में, हम 17 अंक प्राप्त कर सकते हैं।

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

  • एक फ़ंक्शन को परिभाषित करें dp() । यह बाएँ, दाएँ, t

    . ले जाएगा
  • यदि बाएँ> दाएँ गैर-शून्य है, तो

    • वापसी 0

  • संख्या:=अंक [बाएं]

  • लेफ्ट2 :=लेफ्ट

  • जबकि बाएँ2 <दाएँ और nums[left2 + 1] अंक के समान है, करें

    • लेफ्ट2 :=लेफ्ट2 + 1

  • t :=t + left2 - बाएँ + 1

  • बाएँ :=बाएँ2 + 1

  • अंक :=t से घात 2 + dp (बाएं, दाएं, 0)

  • मध्य श्रेणी के लिए बाएँ से दाएँ + 1 करें, करें

    • अगर nums[mid], num के समान है, तो

      • अंक:=अधिकतम (अंक, डीपी (बाएं, मध्य -1, 0) + डीपी (मध्य, दाएं, टी))

  • वापसी बिंदु

  • मुख्य कार्य से, हम निम्नलिखित कार्य करते हैं -

  • प्रिंट (dp(0, अंकों का आकार - 1, 0))

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

उदाहरण

class Solution:
   def solve(self, nums):
      def dp(left, right, t):
         if left > right:
            return 0
         num = nums[left]
         left2 = left
         while left2 < right and nums[left2 + 1] == num:
            left2 += 1
         t += left2 − left + 1
            left = left2 + 1
         points = t ** 2 + dp(left, right, 0)
         for mid in range(left, right + 1):
            if nums[mid] == num:
               points = max(points, dp(left, mid − 1, 0) + dp(mid, right, t))
            return points
         return dp(0, len(nums) − 1, 0)
ob1 = Solution()
print(ob1.solve([4, 4, 6, 4, 4]))

इनपुट

[4, 4, 6, 4, 4]

आउटपुट

17

  1. पायथन में उप-पेड़ों के नोड मानों के योग से न्यूनतम मान ज्ञात करने का कार्यक्रम

    मान लीजिए, हमारे पास एक पेड़ है जिसके सभी नोड्स 1 से n तक गिने गए हैं। प्रत्येक नोड में एक पूर्णांक मान होता है। अब यदि हम पेड़ से एक किनारा हटाते हैं, तो दो उप-वृक्षों के नोड मानों के योग में अंतर न्यूनतम होना चाहिए। हमें ऐसे उप-वृक्षों के बीच न्यूनतम अंतर का पता लगाना और वापस करना होगा। पेड़ हमें

  1. यह पता लगाने के लिए कार्यक्रम कि क्या पायथन में सभी के द्वारा ग्राफ़ को ट्रैवर्स किया जा सकता है

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्षों की संख्या 0 से n - 1 है। ग्राफ अप्रत्यक्ष है और प्रत्येक किनारे का वजन है। ग्राफ में तीन प्रकार के भार हो सकते हैं और प्रत्येक भार एक विशेष कार्य को दर्शाता है। दो लोग हैं जो ग्राफ को पार कर सकते हैं, अर्थात् जैक और केसी। जैक ग्राफ को पार कर सकता

  1. पायथन में सभी संभावित वैध पथों से अधिकतम अंक खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास दो सरणियाँ हैं nums1 और nums2। एक वैध पथ निम्नानुसार परिभाषित किया गया है - पार करने के लिए nums1 या nums2 चुनें (इंडेक्स-0 से)। सरणी को बाएँ से दाएँ पार करें। अब, यदि हम nums1 और nums2 में मौजूद किसी भी मान से आगे बढ़ रहे हैं तो हम पथ को अन्य सरणी में बदल सकते हैं। य