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

पायथन में सभी दिनों की यात्रा के लिए न्यूनतम बस किराया ढूंढने का प्रोग्राम

सॉर्ट की गई दिनों की सूची days दी गई है जिन दिनों बस यात्रा करनी है। तीन प्रकार के टिकट उपलब्ध हैं:

  • 1-दिन पास: ₹2
  • 7-दिन पास: ₹7
  • 30-दिन पास: ₹25

सभी दिनों की यात्रा के लिए न्यूनतम लागत ढूंढें।

उदाहरण

इनपुट: days = [1, 3, 5, 6, 28]

आउटपुट: 9

व्याख्या: दिन 1 पर 7-दिन पास खरीदें (दिन 1-7 कवर), दिन 28 पर 1-दिन पास खरीदें। कुल = 7 + 2 = 9।

एल्गोरिदम (डायनामिक प्रोग्रामिंग)

  1. n = max(days) (अंतिम दिन)।
  2. days को सेट में बदलें O(1) लुकअप के लिए।
  3. dp सरणी आकार n+1 बनाएं, dp[i] = दिन i तक की न्यूनतम लागत।
  4. i = 1 से n तक:
    • यदि i यात्रा दिन नहीं है: dp[i] = dp[i-1]।
    • यदि यात्रा दिन है:
      • dp[i] = min(dp[i-1] + 2, dp[max(0,i-7)] + 7, dp[max(0,i-30)] + 25)
  5. dp[n] वापस करें।

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

class Solution:
    def solve(self, days):
        n = max(days)
        travel_days = set(days)
        dp = [0] * (n + 1)
        
        for i in range(1, n + 1):
            if i in travel_days:
                cost_1 = dp[i - 1] + 2
                cost_7 = dp[max(0, i - 7)] + 7
                cost_30 = dp[max(0, i - 30)] + 25
                dp[i] = min(cost_1, cost_7, cost_30)
            else:
                dp[i] = dp[i - 1]
        return dp[n]

# परीक्षण
ob = Solution()
print(ob.solve([1, 3, 5, 6, 28]))  # 9
print(ob.solve([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31]))  # 17

समय जटिलता

  • O(n) जहां n = max(days)।
  • स्थान: O(n)।

अनुकूलन

यदि दिन बहुत बड़े हैं (जैसे 10^9), तो केवल यात्रा दिनों पर DP करें और बाइनरी सर्च का उपयोग करके पिछले वैध दिन ढूंढें। लेकिन दिए गए प्रतिबंधों के लिए यह दृष्टिकोण ठीक है।

  1. सभी पेड़ों को जलाने में लगने वाले दिनों की संख्या ज्ञात करने का पायथन प्रोग्राम सभी पेड़ों को जलाने में लगने वाले दिनों की संख्या ज्ञात करने का पायथन प्रोग्राम

    मान लीजिए हमारे पास एक 2D मैट्रिक्स है जो एक जंगल को दर्शाता है जहां तीन प्रकार के सेल हैं: 0 खाली सेल, 1 पेड़ सेल, 2 जलता हुआ पेड़ सेल। हर दिन, एक पेड़ आग पकड़ लेता है जब उसके आसन्न (ऊपर, नीचे, बाएं, दाएं, विकर्ण नहीं) पेड़ में आग लगी हो। हमें वह दिनों की संख्या ढूंढनी है जो हर पेड़ को जलाने में ल

  1. सभी शिपमेंट पूरा करने के लिए कुल लागत ज्ञात करने का पायथन प्रोग्राम सभी शिपमेंट पूरा करने के लिए कुल लागत ज्ञात करने का पायथन प्रोग्राम

    मान लीजिए हमारे पास ports नामक सूचियों की एक सूची है, जहां ports[i] उन पोर्ट्स की सूची दर्शाता है जिनसे पोर्ट i जुड़ा हुआ है। हमारे पास shipments नामक सूचियों की एक और सूची है जहां प्रत्येक सूची [i, j] क्रम में है जो दर्शाता है कि पोर्ट i से पोर्ट j तक एक शिपमेंट अनुरोध है। और पोर्ट i से पोर्ट j तक

  1. पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें

    इस लेख में, हम नीचे दिए गए प्रॉब्लम स्टेटमेंट के समाधान के बारे में सीखेंगे: प्रॉब्लम स्टेटमेंट एक नंबर इनपुट दिए जाने पर, दी गई संख्या के फैक्टर्स का न्यूनतम योग ढूंढें। यहां हम सभी फैक्टर्स और उनके संबंधित योग की गणना करेंगे और फिर उनमें से न्यूनतम ढूंढेंगे। तो संख्या के गुणनफल का न्यूनतम योग ढू