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

पायथन में दी गई दो लिस्ट के अंतिम इंडेक्स तक पहुंचने की लागत खोजने का प्रोग्राम


मान लीजिए हमारे पास nums0 और nums1 नामक समान लंबाई की दो संख्याओं की लिस्ट हैं और दो अन्य मान d (दूरी) और c (लागत) हैं। यदि हम इंडेक्स 0 से nums0 या nums1 में से किसी एक से शुरू करते हैं और किसी भी लिस्ट के अंतिम इंडेक्स पर समाप्त होना चाहते हैं। अब, प्रत्येक राउंड में, हम cost की लागत पर दूसरी लिस्ट पर स्विच कर सकते हैं। फिर हम अधिकतम d दूरी आगे कूद सकते हैं जहां किसी इंडेक्स पर लैंड करने की लागत उस बिंदु का मान है। हमें कार्य पूरा करने के लिए न्यूनतम कुल लागत ढूंढनी है।

उदाहरण के लिए, यदि इनपुट nums0 = [2, 3, 10, 10, 6], nums1 = [10, 10, 4, 5, 100], d = 2, c = 3 है, तो आउटपुट 18 होगा, क्योंकि हम 2 से शुरू कर सकते हैं, फिर दूसरी लिस्ट पर 4 पर स्विच करें, फिर वापस पहली लिस्ट पर 6 पर स्विच करें। तो लागत 2 + 4 + 6 = 12 और दो बार स्विच करने की लागत 3 प्रत्येक, कुल 18।

समाधान दृष्टिकोण

इस समस्या को हल करने के लिए हम रिकर्सन + मेमोइजेशन का उपयोग करेंगे:

  • switch := की 0 के लिए nums0, और की 1 के लिए nums1 वाला मैप
  • search(idx, nums) फंक्शन परिभाषित करें:
    • यदि idx >= switch[nums] का आकार है, तो inf लौटाएं
    • यदि idx == switch[nums] का आकार - 1 है, तो switch[nums][-1] लौटाएं
    • c := inf
    • i को 1 से dist तक लूप चलाएं:
      • c := min(c, switch[nums][idx] + search(idx + i, nums))
      • c := min(c, switch[nums][idx] + cost + search(idx + i, not nums))
    • c लौटाएं
  • मुख्य मेथड से min(search(0, 0), search(0, 1)) लौटाएं

पायथन कार्यान्वयन

class Solution:
    def solve(self, nums0, nums1, dist, cost):
        switch = {0: nums0, 1: nums1}
        def search(idx, nums):
            if idx >= len(switch[nums]):
                return float("inf")
            if idx == len(switch[nums]) - 1:
                return switch[nums][-1]
            c = float("inf")
            for i in range(1, dist + 1):
                c = min(c, switch[nums][idx] + search(idx + i, nums))
                c = min(c, switch[nums][idx] + cost + search(idx + i, int(not nums)))
            return c
        return min(search(0, 0), search(0, 1))

ob = Solution()
nums0 = [2, 3, 10, 10, 6]
nums1 = [10, 10, 4, 5, 100]
d = 2
c = 3
print(ob.solve(nums0, nums1, d, c))

इनपुट

[2, 3, 10, 10, 6],[10, 10, 4, 5, 100], 2, 3

आउटपुट

18
  1. - पायथन में बाउंडेड ऐरे में दिए गए इंडेक्स पर अधिकतम मान खोजने का प्रोग्राम

    मान लीजिए हमारे पास तीन मान n, index और maxSum हैं। एक ऐरे nums पर विचार करें हमें nums[index] ढूंढना है और nums निम्नलिखित शर्तों को पूरा करता है: nums का आकार n है। n में सभी तत्व पॉजिटिव हैं। सभी i के लिए |nums[i] - nums[i+1]| <= 1, जहां 0 <= i < n-1। nums के सभी तत्वों का योग maxSum स

  1. - दो दी गई तारीखों के बीच दिनों की संख्या ढूंढने के लिए पायथन प्रोग्राम

    दो तारीखों के बीच दिनों की संख्या ढूंढने के लिए, हम पायथन datetime मॉड्यूल का उपयोग कर रहे हैं। सबसे पहले, आवश्यक लाइब्रेरी इम्पोर्ट करें: from datetime import date डेट ऑब्जेक्ट बनाएं और उन तारीखों को इनपुट करें जिनसे आप दिनों की गणना करना चाहते हैं: date1 = date(2021, 7, 20) date2 = date(2021, 8

  1. Python से लिंक्ड लिस्ट के रूप में दिए गए दो पॉलीनोमियल्स को कैसे जोड़ें? Python से लिंक्ड लिस्ट के रूप में दिए गए दो पॉलीनोमियल्स को कैसे जोड़ें?

    पावर के अनुसार सॉर्टेड लिंक्ड लिस्ट पॉलीनोमियल्स को मर्ज-जैसे एल्गोरिदम से जोड़ें: समान पावर के कोएफिशिएंट्स जोड़ें। एल्गोरिदम डमी नोड और करंट नोड इनिशियलाइज़ करें। जब तक दोनों लिस्ट्स खाली नहीं: पावर कंपेयर करें। poly2.power: poly1 नोड अटैच करें। poly1.power < poly2.power: poly2 नोड अटैच करें। सम