public int minimizeTheDifference(int[][] mat, int target) {
for (int[] ints : mat) {
Arrays.sort(ints);
}
int m = mat.length;
int n = mat[0].length;
int max = 0;
int min = 0;
for (int i = 0; i < m; i++) {
min += mat[i][0];
max += mat[i][n - 1];
}
if (max <= target) {
return target - max;
}
if (min >= target) {
return min - target;
}
int C = 2 * target;
int[] dp = new int[ C + 1];
dp[0] = 1;
for (int i = 0; i < m; i++) {
for (int j = C; j > 0; j--) {
dp[j] = 0;
for (int k = 0; k < n && mat[i][k] <= j ; k++) {
if (dp[j - mat[i][k]] != 0) {
dp[j] = 1;
}
}
}
}
int ans = Integer.MAX_VALUE;
for (int i = C; i > 0; i--) {
if (dp[i] == 1) {
ans = Math.min(ans, Math.abs(target - i));
}
}
return ans;
}
lc-1981
原创wx5be5864e766ab ©著作权
©著作权归作者所有:来自51CTO博客作者wx5be5864e766ab的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
poj 1981(单位圆覆盖点)
题意:一个单位圆最多能覆盖平面上多少
计算几何 #include ci i++ -
LC——移动零
LC——移动零题目链接:https://
leetcode 算法 双指针