/* * @lc app=leetcode id=363 lang=cpp * * [363] Max Sum of Rectangle No Larger Than K * * https://leetcode.com/problems/max-sum-of-rectangle-no-larger-than-k/description/ * * algorithms * Hard (35.57%) * Likes: 487 * Dislikes: 36 * Total Accepted: 30.4K * Total Submissions: 85.3K * Testcase Example: '[[1,0,1],[0,-2,3]]\n2' * * Given a non-empty 2D matrix matrix and an integer k, find the max sum of a * rectangle in the matrix such that its sum is no larger than k. * * Example: * * * Input: matrix = [[1,0,1],[0,-2,3]], k = 2 * Output: 2 * Explanation: Because the sum of rectangle [[0, 1], [-2, 3]] is * 2, * and 2 is the max number no larger than k (k = 2). * * Note: * * * The rectangle inside the matrix must have an area > 0. * What if the number of rows is much larger than the number of columns? * */// @lc code=startclassSolution {public:intmaxSumSubmatrix(vector<vector<int>>& matrix,int k) {constint M =matrix.size(), N = M ==0?0:matrix[0].size(); vector<vector<int>>sum(M,vector<int>(N,0));int res = INT_MIN;for (int i =0; i < N; ++i) { vector<int>sum(M);for (int j = i; j < N; ++j) {for (int k =0; k < M; ++k) {sum[k] +=matrix[k][j]; }int cur_sum =0; set<int>s({0});for (auto a : sum) { cur_sum += a;constauto it =s.lower_bound(cur_sum - k);if (it !=s.end()) res =max(res, cur_sum -*it);s.insert(cur_sum); } } }return res; }};// @lc code=end