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

पायथन में लक्ष्य प्राप्त करने के लिए प्रतीकों की व्यवस्था करने के कई तरीकों को खोजने का कार्यक्रम?

मान लीजिए कि हमारे पास गैर-ऋणात्मक संख्याओं की एक सूची है जिन्हें अंक कहा जाता है और एक पूर्णांक लक्ष्य भी है। हमें + और - को ऐसे अंकों में व्यवस्थित करने के तरीकों की संख्या ज्ञात करनी है, ताकि व्यंजक लक्ष्य के बराबर हो।

इसलिए, यदि इनपुट संख्या =[2, 3, 3, 3, 2] लक्ष्य =9 की तरह है, तो आउटपुट 2 होगा, जैसा कि हमारे पास -2 + 3 + 3 + 3 + 2 और 2 + 3 + हो सकता है। 3 + 3 - 2.

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

  • s :=अंकों में सभी संख्याओं का योग

  • अगर (एस + लक्ष्य) मोड 2 0 या लक्ष्य> एस के समान नहीं है, तो

    • वापसी 0

  • W :=भागफल (s + लक्ष्य) / 2

  • dp1 :=आकार की एक सूची (W + 1) और 0 से भरें

  • dp1[0] :=1

  • dp2 :=आकार की सूची (W + 1) और 0 से भरें

  • मेरे लिए 0 से लेकर अंकों के आकार तक, करें

    • j के लिए 0 से W + 1 की सीमा में, करें

      • अगर j>=nums[i], तब

        • dp2[j] :=dp2[j] + dp1[j - nums[i]]

    • j के लिए 0 से W + 1 की सीमा में, करें

      • dp1[j] :=dp1[j] + dp2[j]

      • dp2[j] :=0

  • dp1 का अंतिम तत्व लौटाएं

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

उदाहरण

class Solution:
   def solve(self, nums, target):
      s = sum(nums)
      if (s + target) % 2 != 0 or target > s:
         return 0
      W = (s + target) // 2
      dp1 = [0] * (W + 1)
      dp1[0] = 1
      dp2 = [0] * (W + 1)
      for i in range(len(nums)):
         for j in range(W + 1):
            if j >= nums[i]:
               dp2[j] += dp1[j - nums[i]]
            for j in range(W + 1):
               dp1[j] += dp2[j]
               dp2[j] = 0
         return dp1[-1]

ob = Solution()
nums = [2, 3, 3, 3, 2]
target = 9
print(ob.solve(nums, target))

इनपुट

[2, 3, 3, 3, 2], 9

आउटपुट

2

  1. n बदमाशों को व्यवस्थित करने के कई तरीके खोजने का कार्यक्रम ताकि वे पायथन में एक दूसरे पर हमला न कर सकें

    मान लीजिए कि हमारे पास एक संख्या n है जो n x n आकार की शतरंज की बिसात का प्रतिनिधित्व करती है। हमें यह पता लगाना है कि हम कितने तरीकों से बदमाशों को रख सकते हैं, ताकि वे एक दूसरे पर हमला न कर सकें। यहां दो तरीकों को अलग माना जाएगा यदि किसी एक तरीके से, शतरंज की बिसात के कुछ सेल पर कब्जा कर लिया जाता

  1. पायथन में हम जितने सिक्के एकत्र कर सकते हैं, उन्हें खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक 2D मैट्रिक्स है जहां प्रत्येक सेल कुछ सिक्के संग्रहीत करता है। अगर हम [0,0] से शुरू करते हैं, और केवल दाएं या नीचे जा सकते हैं, तो हमें नीचे दाएं कोने से अधिकतम सिक्कों की संख्या का पता लगाना होगा। तो, अगर इनपुट पसंद है 1 4 2 2 0 0 0 5 तब आउटपुट 14 होग

  1. प्रोग्राम यह पता लगाने के लिए कि हम कितने तरीकों से पायथन में सीढ़ियाँ चढ़ सकते हैं

    मान लीजिए कि हमारे पास n सीढ़ियां हैं, और हम एक बार में 1 या 2 सीढ़ियां चढ़ सकते हैं। हमें एक फ़ंक्शन को परिभाषित करना होगा जो सीढ़ियों पर चढ़ने के अनूठे तरीकों की संख्या लौटाता है। चरणों का क्रम नहीं बदला जाना चाहिए, इसलिए चरणों के प्रत्येक भिन्न क्रम को एक तरीके के रूप में गिना जाता है। यदि उत्तर