LightOJ 1076 - Get the Containers

来源:互联网 发布:adobe cc 2017 mac破解 编辑:程序博客网 时间:2024/06/18 07:35

题意:

有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
原创粉丝点击