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

सिक्कों की संख्या का पता लगाने के लिए कार्यक्रम जिसे हम ऊपर से नीचे-दाएं सेल में चुन सकते हैं और पायथन में वापस आ सकते हैं


मान लीजिए कि हमारे पास 3 संभावित मानों वाला 2D मैट्रिक्स है -

  • 0 खाली सेल के लिए।

  • 1 सिक्के के लिए।

  • -1 दीवार के लिए।

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

तो, अगर इनपुट पसंद है

0 1 1
1 1 1
−1 1 1
0 1 1

तो आउटपुट 8 होगा।

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

  • n :=चटाई की पंक्ति संख्या, m :=चटाई की स्तंभ संख्या

  • उपयोग() फ़ंक्शन को परिभाषित करें। इसमें i, j, k, l

    . लगेगा
  • यदि i और j चटाई या चटाई की सीमा में नहीं हैं [i, j] −1 के समान है, तो

    • वापसी -inf

  • यदि k और l चटाई या चटाई की सीमा में नहीं हैं [k, l] −1 के समान है, तो

    • वापसी -inf

  • अगर i, j, k और l सभी 0 हैं, तो

    • वापसी चटाई[0, 0]

  • सर्वोत्तम:=-इन्फ़

  • [(−1, 0) ,(0, −1)] में प्रत्येक जोड़ी (dx1, dy1) के लिए, करें

    • [(−1, 0) ,(0, −1)] में प्रत्येक जोड़ी (dx2, dy2) के लिए, करें

      • सर्वोत्तम:=अधिकतम सर्वोत्तम और उपयोग (i + dy1, j + dx1, k + dy2, l + dx2)

  • वापसी चटाई [i, j] +(1 जब मैं कश्मीर के समान नहीं है, अन्यथा 0) * चटाई [के, एल] + सबसे अच्छा

  • मुख्य विधि से निम्न कार्य करें -

  • अधिकतम 0 लौटाएं और उपयोग करें(n - 1, m - 1, n - 1, m - 1)

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

उदाहरण

class Solution:
   def solve(self, mat):
      n, m = len(mat), len(mat[0])
      def util(i, j, k, l):
         if not (0 <= i < n and 0 <= j < m) or mat[i][j] == −1:
            return −1e9
         if not (0 <= k < n and 0 <= l < m) or mat[k][l] == −1:
            return −1e9
         if i == 0 and j == 0 and k == 0 and l == 0:
            return mat[0][0]
         best = −1e9
         for dx1, dy1 in [(−1, 0), (0, −1)]:
            for dx2, dy2 in [(−1, 0), (0, −1)]:
               best = max(best, util(i + dy1, j + dx1, k + dy2, l + dx2))
         return mat[i][j] + (i != k) * mat[k][l] + best
      return max(0, util(n − 1, m − 1, n − 1, m − 1))
ob = Solution()
matrix = [
   [0, 1, 1],
   [1, 1, 1],
   [1, −1, 1],
   [0, 1, 1]
]
print(ob.solve(matrix))

इनपुट

[
   [0, 1, 1],
   [1, 1, 1],
   [1, −1, 1],
   [0, 1, 1]
]

आउटपुट

8

  1. पायथन में परिवर्तन करने के लिए आवश्यक सिक्कों की संख्या खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास विभिन्न मूल्यवर्ग (1,5,10,25) के सिक्के हैं और कुल राशि है। हमें उस राशि को बनाने के लिए आवश्यक सिक्कों की सबसे कम संख्या की गणना करने के लिए एक फ़ंक्शन को परिभाषित करना होगा। तो अगर इनपुट 64 है, तो आउटपुट 7 है। यह 25 + 25 + 10 + 1 + 1 + 1 + 1 =64 का उपयोग करके बनाया गया है।

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

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

  1. स्ट्रिंग की संख्या खोजने के लिए प्रोग्राम जहां हम 'ए' 'ए' या 'बी' हो सकते हैं, और 'बी' पाइथन में 'बी' रहता है

    मान लीजिए कि हमारे पास केवल ए और बी के साथ एक स्ट्रिंग है। ए एस ए रह सकता है या बी में बदल सकता है, लेकिन बी को बदला नहीं जा सकता है। हमें अद्वितीय स्ट्रिंग्स की संख्या ज्ञात करनी होगी जो हम बना सकते हैं। इसलिए, यदि इनपुट s =baab जैसा है, तो आउटपुट 4 होगा, क्योंकि हम इन स्ट्रिंग्स को बना सकते हैं -