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

पायथन में स्टोन गेम के स्कोर का न्यूनतम अंतर ज्ञात करने का प्रोग्राम


मान लीजिए हमारे पास stones नामक एक सरणी है जहां stones[i] बाएं से i-वें पत्थर का मान दर्शाता है। दो दोस्त अमल और बिमल इन पत्थरों के साथ एक टर्न-आधारित खेल खेल रहे हैं और अमल हमेशा पहले शुरू करता है। n पत्थर एक पंक्ति में व्यवस्थित हैं। प्रत्येक खिलाड़ी पंक्ति से या तो सबसे बाएं पत्थर या सबसे दाएं पत्थर को हटा सकता है और पंक्ति में शेष पत्थरों के मूल्यों के योग के बराबर अंक प्राप्त कर सकता है। जिसका स्कोर अधिक होगा वह जीतेगा। अब, बिमल ने पाया कि वह हमेशा यह खेल हार जाएगा, इसलिए उसने स्कोर के अंतर को कम करने का फैसला किया। अमल का लक्ष्य स्कोर में अंतर को अधिकतम करना है। इसलिए हमें अमल और बिमल के स्कोर में अंतर ज्ञात करना है यदि वे दोनों इष्टतम रूप से खेलते हैं।

इसलिए, यदि इनपुट है stones = [6,4,2,5,3], तो आउटपुट 6 होगा क्योंकि अमल 3 ले सकता है, इसलिए उसका स्कोर 6+4+2+5 = 17 होगा, बिमल का स्कोर अब तक 0, और सरणी [6,4,2,5] की तरह है, फिर बिमल 6 लेता है इसलिए उसका स्कोर 4+2+5 = 11, अब सरणी [4,2,5] है। फिर अमल 4 हटाता है, इसलिए उसका स्कोर 17+2+5 = 24, पत्थर सरणी [2,5] बॉब 2 हटाता है, इसलिए उसका स्कोर 11+5 = 16, वर्तमान पत्थर सरणी [5] और अमल अंतिम पत्थर को 5 मान के साथ हटाता है और 0 स्कोर प्राप्त करता है, इसलिए उसका अंतिम स्कोर 24 + 0 = 24। इसलिए उनके स्कोर का अंतर 24-16 = 8 है।

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

  • n := stones का आकार
  • dp := n आकार की एक सरणी जिसे 0 से भरा गया हो
  • i को n - 1 से 0 तक, 1 से घटाकर, करें
    • v := stones[i]
    • run_sum := 0
    • j को i + 1 से n - 1 तक के लिए, करें
      • new_run := run_sum + stones[j]
      • dp[j] := (new_run - dp[j]) और (run_sum+v - dp[j-1]) का अधिकतम
      • run_sum := new_run
  • dp[n-1] वापस करें

उदाहरण

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

def solve(stones):
    n = len(stones)
    dp = [0] * n
    for i in range(n - 1, -1, -1):
        v = stones[i]
        run_sum = 0
        for j in range(i + 1, n):
            new_run = run_sum + stones[j]
            dp[j] = max(new_run - dp[j], run_sum + v - dp[j - 1])
            run_sum = new_run
    return dp[n - 1]

stones = [6,4,2,5,3]
print(solve(stones))

इनपुट

[6,4,2,5,3]

आउटपुट

8
  1. पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम पायथन में छड़ी काटने की न्यूनतम लागत ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास एक मान n और cuts नामक एक सरणी है। मान लीजिए n इकाई लंबाई की एक लकड़ी की छड़ी है। छड़ी 0 से n तक लेबल की गई है। यहां cuts[i] एक स्थिति दर्शाता है जहां हम काट सकते हैं। हमें कटौती क्रम में करनी चाहिए, लेकिन हम कटौती के क्रम को अपनी इच्छानुसार बदल सकते हैं। यहां एक कटौती की लागत का

  1. - पायथन में आसन्न तत्वों के सूचकांकों के न्यूनतम संभावित अंतर ज्ञात करने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है। हम कह सकते हैं कि दो संख्याएं nums[i] <= nums[j] आसन्न हैं जब nums में (nums[i], nums[j]) के बीच कोई संख्या नहीं है। हमें न्यूनतम संभव |j-i| ज्ञात करना है जैसे कि nums[j] और nums[i] आसन्न हैं। उदाहरण के लिए, nums = [1, -9, 6, -6, 2] के लिए आउटपु

  1. - पायथन में दो सूचियों से दो तत्वों के बीच न्यूनतम अंतर खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो सूचियाँ L1 और L2 हैं, हमें L1 से एक संख्या और L2 से एक संख्या के बीच का सबसे छोटा अंतर ढूंढना है।इसलिए, यदि इनपुट L1 = [2, 7, 4], L2 = [16, 10, 11] जैसा है, तो आउटपुट 3 होगा, क्योंकि सबसे छोटा अंतर 10 - 7 = 3 है।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −सूची L1 और