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

पायथन में एक मैट्रिक्स में अधिकतम गैर नकारात्मक उत्पाद खोजने का कार्यक्रम

मान लीजिए कि हमारे पास m x n कोटि का एक आव्यूह है। प्रारंभ में हम ऊपरी-बाएँ कोने के सेल (0, 0) पर हैं, और प्रत्येक चरण में, हम केवल मैट्रिक्स में दाएँ या नीचे जा सकते हैं। अब ऊपरी-बाएँ कोने के सेल (0, 0) से निचले-दाएँ कोने के सेल (m-1, n-1) तक सभी संभावित रास्तों में से, हमें अधिकतम गैर-ऋणात्मक उत्पाद के साथ पथ खोजना होगा। अगर उत्तर बहुत बड़ा है, तो अधिकतम गैर-नकारात्मक उत्पाद मॉड्यूल 10^9+7 लौटाएं।

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

2 -4 2
2 -4 2
4 -8 2

तो आउटपुट 256 होगा क्योंकि पथ रंगीन है,

2 -4 2
2 -4 2
4 -8 2

तो उत्पाद [2 * 2 * (-4) * (-8) * 2] =256 है।

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

  • p :=10^9+7
  • m :=मैट्रिक्स की पंक्ति गणना
  • n :=मैट्रिक्स की कॉलम संख्या
  • dp :=एक 2d मैट्रिक्स जिसमें दिए गए मैट्रिक्स के साथ क्रम का है और 0 से भरें
  • 0 से m-1 की सीमा में i के लिए
    • जे के लिए 0 से n -1 की सीमा में, करो
      • यदि मैं 0 के समान है और j 0 के समान है, तो
        • dp[i, j] :=एक जोड़ी बनाएं (मैट्रिक्स[i, j], मैट्रिक्स[i, j])
      • अन्यथा जब मैं 0 के समान हो, तो
        • Ans1 :=dp[i, j-1, 0] * मैट्रिक्स[i, j]
        • dp[i, j] :=एक जोड़ी बनाएं (Ans1, ans1)
      • अन्यथा जब j, 0 के समान हो, तो
        • Ans1 :=dp[i-1, j, 0] * मैट्रिक्स[i, j]
        • dp[i, j] :=एक जोड़ी बनाएं (Ans1, ans1)
      • अन्यथा,
        • Ans1 :=dp[i-1, j, 0] * मैट्रिक्स[i, j]
        • Ans2 :=dp[i-1, j, 1] * मैट्रिक्स[i, j]
        • Ans3 :=dp[i, j-1, 0] * मैट्रिक्स[i, j]
        • Ans4 :=dp[i, j-1, 1] * मैट्रिक्स[i, j]
        • अधिकतम:=अधिकतम उत्तर1, उत्तर2, उत्तर3 और उत्तर4
        • न्यूनतम:=न्यूनतम उत्तर1, उत्तर2, उत्तर3 और उत्तर4
        • यदि अधिकतम <0, तो
          • dp[i, j] :=एक जोड़ी बनाएं (न्यूनतम, न्यूनतम)
        • अन्यथा जब न्यूनतम> 0, तब
          • dp[i, j] :=एक जोड़ी बनाएं (अधिकतम, अधिकतम)
        • अन्यथा,
          • dp[i, j] :=एक जोड़ी बनाएं (अधिकतम, न्यूनतम)
  • अगर dp[m-1, n-1, 0] <0, तो
    • वापसी -1
  • अन्यथा,
    • रिटर्न डीपी[एम-1, एन-1, 0] % पी

उदाहरण

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

def solve(matrix):
   p = 1e9+7
   m = len(matrix)
   n = len(matrix[0])

   dp = [[0 for _ in range(n)] for _ in range(m)]

   for i in range(m):
      for j in range(n):
         if i == 0 and j == 0:
            dp[i][j] = [matrix[i][j], matrix[i][j]]

         elif i == 0:
            ans1 = dp[i][j-1][0] * matrix[i][j]
            dp[i][j] = [ans1, ans1]

         elif j == 0:
            ans1 = dp[i-1][j][0] * matrix[i][j]
            dp[i][j] = [ans1, ans1]

         else:
            ans1 = dp[i-1][j][0] * matrix[i][j]
            ans2 = dp[i-1][j][1] * matrix[i][j]
            ans3 = dp[i][j-1][0] * matrix[i][j]
            ans4 = dp[i][j-1][1] * matrix[i][j]
            maximum = max(ans1, ans2, ans3, ans4)
            minimum = min(ans1, ans2, ans3 ,ans4)
            if maximum < 0:
               dp[i][j] = [minimum, minimum]
            elif minimum > 0 :
               dp[i][j] = [maximum, maximum]
            else:
               dp[i][j] = [maximum, minimum]

   if dp[m-1][n-1][0] < 0:
      return -1
   else:
      return int(dp[m-1][n-1][0] % p)

matrix = [[2,-4,2],[2,-4,2],[4,-8,2]]
print(solve(matrix))

इनपुट

"pqpqrrr"

आउटपुट

256

  1. दो सूचियों के कार्टेशियन उत्पाद को खोजने के लिए पायथन कार्यक्रम

    मान लीजिए हमारे पास डेटा l1 और l2 की दो सूची है। हमें इन दो सूचियों का कार्तीय गुणनफल ज्ञात करना है। जैसा कि हम जानते हैं कि यदि दो सूचियाँ (a, b) और (c, d) जैसी हैं तो कार्तीय गुणनफल {(a, c), (a, d), (b, c), (b, d)} होगा। . ऐसा करने के लिए हम itertools पुस्तकालय का उपयोग करेंगे और इस पुस्तकालय में

  1. पायथन में अधिकतम भवन ऊंचाई खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक मान n है और जोड़े की एक और सूची है जिसे प्रतिबंध कहा जाता है। हम एक शहर में नई इमारतें बनाना चाहते हैं। लेकिन कुछ प्रतिबंध हैं। हम एक लाइन में बना सकते हैं और इमारतों को 1 से n तक लेबल किया जाता है। प्रतिबंधों के दो पैरामीटर हैं, इसलिए प्रतिबंध [i] =(id_i, max_height_i) इंग

  1. एक मैट्रिक्स के स्थानान्तरण को खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन एक मैट्रिक्स को देखते हुए, हमें उसी मैट्रिक्स में ट्रांसपोज़ को स्टोर करना होगा और उसे प्रदर्शित करना होगा। पंक्तियों को कॉलम और कॉलम को पंक्तियों में बदलकर मैट्रिक्स का स्थानांतरण प्राप्त किया ज