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

पायथन में गुणन संचालन करने से अधिकतम अंक प्राप्त करने का कार्यक्रम

मान लीजिए कि हमारे पास क्रमशः n और m आकार के दो सरणियाँ संख्याएँ और गुणक हैं (n>=m)। सरणियाँ 1-अनुक्रमित हैं। अब हमारा प्रारंभिक स्कोर 0 है। हम ठीक एम ऑपरेशन करना चाहते हैं। Ith ऑपरेशन (1-अनुक्रमित) पर, हम करेंगे -

  • अंकों के प्रारंभ या अंत में से x में से एक मान चुनें।

  • गुणक [i] * x को स्कोर में जोड़ें।

  • सरणी अंकों से x निकालें।

हमें m ऑपरेशन करने के बाद अधिकतम स्कोर ज्ञात करना है।

इसलिए, यदि इनपुट संख्या =[5,10,15], गुणक =[5,3,2] की तरह है, तो आउटपुट 115 होगा क्योंकि हम 15 ले सकते हैं और 5 से गुणा करके 5*15 =75 प्राप्त कर सकते हैं। , तो 10*3 =30, तो कुल 75+30 =105 और अंत में 5*2 =10 है, इसलिए कुल 105+10 =115।

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

  • n :=अंकों का आकार, m :=आकार गुणक

  • dp :=m x (m+1) आकार की एक 2D सरणी और 0 से भरें

  • मैं के लिए सूची की सीमा 0 से m -1 के विपरीत है, करें

    • j के लिए i से m-1 की श्रेणी में, करें

      • के :=मैं + एम - जे - 1

      • dp[i, j] =अधिकतम (अंक [i] * गुणक [k] + dp [i+1, j]) और (अंक [j-m+n] * गुणक [k] + dp [i, j -1])

  • डीपी का अंतिम तत्व लौटाएं [0]

उदाहरण

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

def solve(nums, multipliers):
   n, m = len(nums), len(multipliers)
   dp = [[0]*m for _ in range(m+1)]

   for i in reversed(range(m)):
      for j in range(i, m):
         k = i + m - j - 1
         dp[i][j] = max(nums[i] * multipliers[k] + dp[i+1][j], nums[j-m+n] * multipliers[k] + dp[i][j-1])

   return dp[0][-1]

nums = [5,10,15]
multipliers = [5,3,2]
print(solve(nums, multipliers))

इनपुट

[5,10,15], [5,3,2]

आउटपुट

115

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

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

  1. पायथन में संख्याओं को हटाकर अधिकतम योगात्मक अंक प्राप्त करने का कार्यक्रम

    मान लीजिए हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है। आइए एक ऑपरेशन पर विचार करें जहां हम एक संख्या का चयन कर सकते हैं, फिर उसे हटा सकते हैं और संख्या और उसके दो आसन्न संख्याओं के योग से अपना स्कोर बढ़ा सकते हैं। यदि हम इस ऑपरेशन को जितनी बार चाहें उतनी बार कर सकते हैं, जब तक कि हम सूची म

  1. पायथन में एन को 1 तक कम करने के लिए अधिकतम संचालन खोजें

    मान लीजिए कि हमारे पास दो संख्याएँ P और Q हैं और वे एक संख्या N =(P!/Q!) बनाते हैं। हमें यथासंभव अधिक से अधिक संक्रियाएँ निष्पादित करके N को घटाकर 1 करना होगा। प्रत्येक ऑपरेशन में, कोई N को N/X से बदल सकता है, जब N, X से विभाज्य हो। इसलिए, यदि इनपुट A =7, B =4 जैसा है, तो आउटपुट 4 होगा क्योंकि N 21