สมมติว่าเรามีเมทริกซ์ 2 มิติที่แต่ละเซลล์เก็บเหรียญไว้ หากเราเริ่มต้นจาก [0,0] และสามารถเคลื่อนที่ไปทางขวาหรือลงได้เท่านั้น เราต้องหาจำนวนเหรียญสูงสุดที่เรารวบรวมได้จากมุมขวาล่าง
ดังนั้นหากอินพุตเป็นแบบ
1 | 4 | 2 | 2 |
0 | 0 | 0 | 5 |
จากนั้นผลลัพธ์จะเป็น 14 ในขณะที่เราใช้เส้นทาง:[1, 4, 2, 2, 5]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้-
-
สำหรับ r ในช่วง 1 ถึงจำนวนแถวของ A ทำ
-
A[r, 0] :=A[r, 0] + A[r-1, 0]
-
-
สำหรับ c ในช่วง 1 ถึงจำนวนคอลัมน์ของ A ทำ
-
A[0, c] :=A[0, c] + A[0, c-1]
-
สำหรับ r ในช่วง 1 ถึงขนาด A ทำ
-
สำหรับ c ในช่วง 1 ถึงขนาด A[0] ให้ทำ
-
A[r, c] =A[r, c] + สูงสุดของ (A[r-1, c] และ A[r, c-1]
-
-
ส่งคืนค่าที่มุมล่างขวาของ A
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น−
ตัวอย่าง
class Solution: def solve(self, A): for r in range(1, len(A)): A[r][0] += A[r-1][0] for c in range(1, len(A[0])): A[0][c] += A[0][c-1] for r in range(1, len(A)): for c in range(1, len(A[0])): A[r][c] += max(A[r-1][c], A[r][c-1]) return A[-1][-1] ob = Solution() matrix = [ [1, 4, 2, 2], [6, 0, 0, 5] ] print(ob.solve(matrix))
อินพุต
matrix = [ [1, 4, 2, 2], [6, 0, 0, 5] ]
ผลลัพธ์
14