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

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


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

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

2 8 7 6
10 10 4 2
5 9 2 3

จากนั้นผลลัพธ์จะเป็น 26 เพราะเราสามารถเลือกเซลล์ที่มีเหรียญ 8, 6 และ 9 และ 3 ได้ ดังนั้นยอดรวมคือ 26

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

  • กำหนดฟังก์ชัน getmax() นี่จะใช้เวลา arr
  • prev_max :=0
  • curr_max :=0
  • res :=0
  • สำหรับแต่ละ num ใน arr ทำ
    • อุณหภูมิ :=curr_max
    • curr_max :=num + prev_max
    • prev_max :=สูงสุดของอุณหภูมิและ prev_max
    • res :=สูงสุดของ res และ curr_max
  • ผลตอบแทน
  • จากวิธีหลัก ให้ทำดังนี้ -
  • ถ้าเมทริกซ์ว่างเปล่า
    • คืน 0
  • m :=จำนวนแถวของเมทริกซ์
  • n :=จำนวนคอลัมน์ของเมทริกซ์
  • row_sum :=อาร์เรย์ขนาด m และเติม 0
  • สำหรับฉันในช่วง 0 ถึง m - 1 ทำ
    • row_sum[i] :=getmax(matrix[i])
  • ส่งคืน getmax(row_sum)

ตัวอย่าง

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

def getmax(arr):
   prev_max, curr_max = 0, 0
   res = 0
   for num in arr:
      temp = curr_max
      curr_max = num + prev_max
      prev_max = max(temp, prev_max)
      res = max(res, curr_max)
   return res

def solve(matrix):
   if not matrix:
      return 0
   m, n = len(matrix), len(matrix[0])
   row_sum = [0 for _ in range(m)]
   for i in range(m):
      row_sum[i] = getmax(matrix[i])
   return getmax(row_sum)

matrix = [
   [2, 8, 7, 6],
   [10, 10, 4, 2],
   [5, 9, 2, 3]
]
print(solve(matrix))

อินพุต

[
[2, 8, 7, 6],
[10, 10, 4, 2],
[5, 9, 2, 3]
]

ผลลัพธ์

26