Mô tả bài toán
Cho ma trận N×N. Tìm kích thước lớn nhất của ma trận con vuông mà tất cả phần tử bằng nhau.
Ví dụ
mat={{1,2,1},{1,2,2},{2,2,2}} → Output: 2 (ma trận con 2×2 góc trên trái hoặc dưới phải).
Giải thuật (Dynamic Programming)
DP[i][j] = kích thước ma trận con vuông lớn nhất kết thúc tại (i,j) toàn giá trị mat[i][j].\nNếu mat[i][j] == mat[i-1][j] == mat[i][j-1] == mat[i-1][j-1]:\n DP[i][j] = min(DP[i-1][j], DP[i][j-1], DP[i-1][j-1]) + 1\nNgược lại: DP[i][j] = 1.\nKết quả = max DP[i][j].
Mã nguồn C++
#include <bits/stdc++.h>
using namespace std;
#define N 4
#define M 4
int findmaxSqMatSize(int mat[][M]) {
int dp[N][M] = {};
int ans = 0;
for (int i=0; i
Đầu ra
The maximum square sub-matrix with all equal elements is 2