1277. 统计全为 1 的正方形子矩阵 - 力扣(LeetCode)

Solution
#include<iostream>
#include<vector>
using namespace std;class Solution {
public://dp(i,j)表示(i,j)以位置的元素为右下角的全1子矩形的最大边长//状态转移方程:mat[i][j]==1时:dp(i,j)=min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])+1;int countSquares(vector<vector<int>>& mat) {int n = mat.size();int m = mat[0].size();int ans = 0;vector<vector<int>>dp(n + 1, vector<int>(m + 1, 0));// for (int i = 0; i < n; ++i) {// dp[i][0] = mat[i][0];// ans+=dp[i][0];// }// for (int j = 0; j < m; ++j) {// dp[0][j] = mat[0][j];// ans+=dp[0][j];// }for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (i == 0 || j == 0) {dp[i][j] = mat[i][j];}else if (mat[i][j]) {dp[i][j] = min(dp[i - 1][j - 1], min(dp[i][j - 1], dp[i - 1][j])) + 1;}ans += dp[i][j];}}return ans;}
};
int main() {return 0;
}