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

โปรแกรมนับจำนวน square submatrices ที่เป็น 1 ทั้งหมดในเมทริกซ์ไบนารีด้วย Python


คำอธิบายปัญหา

กำหนดเมทริกซ์ไบนารี 2D หาจำนวน **square submatrices** ทั้งหมดที่ element ทุกตัวเป็น 1

ตัวอย่าง

Matrix:
0 1 1
0 1 1

Output: 5 (1 ชุด 2x2 + 4 ชุด 1x1)

ขั้นตอนการแก้ปัญหา (DP)

  1. dp[i][j] = ขนาด square ใหญ่สุดที่มุมล่างขวาอยู่ (i,j) และเป็น 1 ทั้งหมด
  2. ถ้า mat[i][j] == 1:
    • ขอบบน/ซ้าย: dp = 1
    • อื่นๆ: dp = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1
  3. ผลรวม dp[i][j] ทุกช่อง = จำนวน square submatrices ทั้งหมด

การตนการทำงาน (Python)

def solve(mat):
    if not mat:
        return 0
    c = 0
    for i in range(len(mat)):
        for j in range(len(mat[0])):
            if mat[i][j] == 1:
                if i == 0 or j == 0:
                    c += 1
                else:
                    temp = min(mat[i-1][j-1], mat[i][j-1], mat[i-1][j]) + mat[i][j]
                    c += temp
                    mat[i][j] = temp
    return c

matrix = [[0, 1, 1], [0, 1, 1]]
print(solve(matrix))  # Output: 5

อินพุต / เอาต์พุต

Input:  [[0, 1, 1], [0, 1, 1]]
Output: 5