Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนเหรียญสูงสุดที่เรารวบรวมได้จากเมทริกซ์ที่กำหนดใน Python


สมมติว่าเรามีเมทริกซ์ 2 มิติ โดยที่เมทริกซ์ [r, c] แทนจำนวนเหรียญในเซลล์นั้น เราสามารถเริ่มต้นจากตำแหน่งใดก็ได้และต้องการเก็บเหรียญโดยการย้ายทิศทางใด ๆ จากสี่ทิศทาง (ขึ้น ลง ซ้ายและขวา ไม่ใช่แนวทแยง) เมื่อเราย้ายไปที่เซลล์ เหรียญจะถูกรวบรวมและมูลค่าของเซลล์นั้นจะกลายเป็น 0 เราไม่สามารถไปที่เซลล์ที่มี 0 เหรียญได้ เราต้องค้นหาจำนวนเหรียญสูงสุดที่เรารวบรวมได้

ดังนั้นหากอินพุตเป็นแบบ

2 4 3
3 6 0
2 0 12

จากนั้นผลลัพธ์จะเป็น 18 เนื่องจากเราสามารถใช้เส้นทาง 2 −> 3 −> 6 −> 4 −> 3

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • หากเมทริกซ์ว่างเปล่า

    • คืนค่า 0

  • n :=จำนวนแถวของเมทริกซ์ m :=จำนวนคอลัมน์ของเสื่อ

  • x :=รายการที่ชอบ [-1, 1, 0, 0], y :=รายการที่ชอบ [0, 0, -1, 1]

  • กำหนดฟังก์ชัน util() นี่จะใช้เวลา a, b

  • ยกเลิก :=0

  • สำหรับ k ในช่วง 0 ถึง 3 ทำ

    • (t1, t2) :=(x[k] + a, y[k] + b)

    • ถ้า (t1, t2) เป็นเซลล์ที่ถูกต้อง

      • t :=mat[t1, t2], mat[t1, t2] :=0

      • ret :=สูงสุดของ ret และ (util(t1, t2) + t)

      • mat[t1, t2] :=t

  • รีเทิร์น

  • จากวิธีหลัก ให้ทำดังต่อไปนี้ −

  • res :=0

  • สำหรับฉันในช่วง 0 ถึง n − 1 ทำ

    • สำหรับ j ในช่วง 0 ถึง m − 1 ทำ

      • ถ้า mat[i, j] ไม่ใช่ศูนย์ ดังนั้น

        • t :=mat[i, j], mat[i, j] :=0

        • res :=สูงสุดของ res และ (util(i, j) + temp)

  • ผลตอบแทน

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:
   def solve(self, mat):
      if not mat:
         return 0
      n, m = len(mat), len(mat[0])
      x, y = [−1, 1, 0, 0], [0, 0, −1, 1]
      def ok(a, b):
         return 0 <= a < n and 0 <= b < m and mat[a][b]
      def util(a, b):
         ret = 0
         for k in range(4):
            t1, t2 = x[k] + a, y[k] + b
            if ok(t1, t2):
               t, mat[t1][t2] = mat[t1][t2], 0
               ret = max(ret, util(t1, t2) + t)
               mat[t1][t2] = t
            return ret
         res = 0
         for i in range(n):
            for j in range(m):
               if mat[i][j]:
                  temp, mat[i][j] = mat[i][j], 0
                  res = max(res, util(i, j) + temp)
         return res
ob = Solution()
matrix = [
   [2, 4, 3],
   [3, 6, 0],
   [2, 0, 12]
]
print(ob.solve(matrix))

อินพุต

[
[2, 4, 3],
[3, 6, 0],
[2, 0, 12] ]

ผลลัพธ์

18