poj 3273(二分)

来源:互联网 发布:飞天侠淘宝客演示 编辑:程序博客网 时间:2024/06/01 08:40

题意:一个农场主计算出农场接下来n天每天的具体花费,并做了一个预算,在m天内用掉n天的钱,相当于把一天或连续多天的花费一天用完,问m天内最大值最小是多少。
题解:二分出钱数,然后判断是否可以m天内用掉n天的钱。

#include <stdio.h>#include <string.h>const int N = 100005;int n, m, mon[N];bool judge(int x) {    int cnt = 0, sum = 0;    for (int i = 0; i < n; i++) {        while (i < n && sum <= x) {            sum += mon[i];            i++;        }        cnt++;        if (cnt > m)            return false;        if (i == n)            break;        i--;        sum = mon[i];    }    if (sum > x && cnt >= m)        return false;    return true;}int main() {    while (scanf("%d%d", &n, &m) == 2) {        int sum = 0;        for (int i = 0; i < n; i++) {            scanf("%d", &mon[i]);            sum += mon[i];        }        int l = 0, r = sum;        while (l < r) {            int mid = (l + r) / 2;            if (judge(mid))                r = mid;            else                l = mid + 1;        }        printf("%d\n", l);    }    return 0;}
0 0
原创粉丝点击