class Solution {
public:
int maxSumSubmatrix(vector<vector<int>>& matrix, int k) {
int N = matrix.size();
int M = matrix[0].size();
int dp[N+1][M+1];
memset(dp,0,sizeof(dp));
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
dp[i][j] = dp[i-1][j] + matrix[i-1][j-1];
}
}
int ans = 0xc0c0c0c0;
// 枚举起点
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
// 枚举终点
for(int x=i;x<=N;x++){
int sum = 0;
for(int y=j;y<=M;y++){
sum += dp[x][y] - dp[i-1][y];
if(sum <= k && sum > ans) ans = sum;
}
}
}
}
return ans;
}
};