没测试,可能有错,肯定大佬指正。个人觉得不是背包。 有爱: public static int isAll(int[] n, int[] m, int S){ int sum = Arrays.stream(n).sum() + S; Arrays.sort(m); int i = 0; while (sum - m[i] > 0) { sum -= m[i]; i++; } return i; } 无爱问题1: public static boolean isAll(int[] n, int[] m, int S){ if (n.length > m.length) { return false; } Arrays.sort(n); Arrays.sort(m); for (int i=0; i<n.length; i++) { int need = n[i] - m[i]; if (need < 0) S += need; } return S >= 0; } 无爱问题2: private static int n[]; private static int m[]; private static int S; public static int[] isAll(int[] n, int[] m, int S){ Arrays.sort(n); Arrays.sort(m); Main.n = n; Main.m = m; Main.S = S; int l =0, r = m.length; while (l < r) { int mid = l + r + 1 >> 1; if (can(mid)) { l = mid; } else { r = mid - 1; } } int ans = 0; for (int i=0; i<l; i++) { ans += m[i]; } return new int[] {l, ans}; } private static boolean can(int count) { int tmpS = S; for (int i = count-1,j = n.length-1; i>=0; i--, j--) { if (n[j] < m[i]) { tmpS -= (m[i] - n[j]); } if (tmpS < 0) { return false; } } return true; }
点赞 4

相关推荐

在看牛客的社畜很积极:身高体重那一行信息去掉,学校那一行的信息放上面,找半天都没找到你是哪个学校什么专业的
点赞 评论 收藏
分享
迷茫的大四🐶:看来已经准备换人了
点赞 评论 收藏
分享
10-16 19:16
Java
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务