zoukankan      html  css  js  c++  java
  • POJ 3273-Monthly Expense 求分组和的最小的最大值【二分答案】

    题目链接:http://poj.org/problem?id=3273

    题目大意:
    给出一个有n个数据的数组,将其分为连续的m份,找到一种分法,是的m份中最大一份总和最小

    解题思路

    直接在答案的区间内二分查找,找到符合条件的答案。

    #include <cstdio>
    
    int main()
    {
        int n, m;
        while (scanf("%d %d", &n, &m) != EOF)
        {
            int i, j;
            int a[100010]; int left = 0, right = 0;
            for (i = 0; i < n; i++)
            {
                scanf("%d", &a[i]);
                if (left < a[i])left = a[i];
                right += a[i];
            }                 //二分答案,答案的值必然为最大值~所有数的总和之间
            while (left < right)
            {
                int cnt = 0;
                int mid = (left + right) >> 1; int cost = 0;
                for (i = 0; i < n; i++)         //对所二分的答案进行判断,看其是否满足题目条件
                {
                    if (cost + a[i] > mid)
                    {
                        cost = a[i];
                        cnt++;
                    }
                    else
                        cost += a[i];
                }
                cnt++;
                if (cnt <= m)right = mid;
                else
                    left = mid + 1;
            }
            printf("%d
    ", right);
        }
        return 0;
    }

    2018-05-13

  • 相关阅读:
    python爬虫
    绕过CDN查找网站真实IP方法收集
    拖库
    伪静态注入的总结
    国外安全网站信息收集
    python字典去重脚本
    AOP 的利器:ASM 3.0 介绍
    JDK工具
    JVM性能调优监控工具
    DMZ
  • 原文地址:https://www.cnblogs.com/00isok/p/9032157.html
Copyright © 2011-2022 走看看