3
int solve(vector<vector<int>> &mat, int n, int m, vector<vector<int>> &dp) {4
if (n < 0 or m < 0 or mat[n][m] == 0) return 0;6
if (dp[n][m] != -1) return dp[n][m];8
return dp[n][m] = (1 + min({solve(mat, n - 1, m, dp), solve(mat, n - 1, m - 1, dp),9
solve(mat, n, m - 1, dp)}));12
int countSquares(vector<vector<int>> &matrix) {13
int n = matrix.size();14
int m = matrix[0].size();17
// vector<vector<int>>dp(n , vector<int>(m,-1));18
// for(int i = 0 ; i<n ; ++i ){19
// for(int j= 0 ; j<m ; ++j ){20
// ans += solve( matrix,i , j , dp );24
vector<vector<int>> dp(n, vector<int>(m, 0));26
for (int i = 0; i < n; ++i) {27
for (int j = 0; j < m; ++j) {28
if (i == 0 || j == 0) {29
dp[i][j] = matrix[i][j];31
if (matrix[i][j]) dp[i][j] = 1 + min({dp[i - 1][j], dp[i - 1][j - 1], dp[i][j - 1]});37
for (auto y : x) ans += y;