LightOJ 1076 - Get the Containers

题意:

有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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值