题意:
有n个输奶管,内有一定牛奶,用m个存储罐装这些牛奶,不能分开装,多个管内的奶可以一起装,但一起是需按照顺序装,求满足的n个罐子中的最小容积。
思路:
确定号区间 的左右两边值后,二分搜索该区间内的值,满足则缩小范围,不满足则扩大范围,直到确定出最小值。
代码:
#include <stdio.h> int num[1500]; int n, m; int judge(int x) { int sum = 0, count = 1; for (int i = 0; i < n; i++) { sum += num[i]; if (sum > x) sum = num[i], count++; } return count > m?1:0; } int main() { int Case,index; scanf("%d", &Case); while (Case--) { scanf("%d %d", &n, &m); int l = 0, r = 0; for (int i = 0; i < n; i++) { scanf("%d", &num[i]); if (num[i] > l) l = num[i]; r += num[i]; } while (r > l) { int mid = (r + l) / 2; if (judge(mid)) l = mid + 1; else r = mid; } printf("Case %d: %d\n", ++index, r); } return 0; }