zoukankan      html  css  js  c++  java
  • P1182 数列分段`Section II` 二分

    https://www.luogu.org/problemnew/show/P1182

    做了这个题才知道二分的强大

    这个题可以假设我们有n个果子 m个容器 要能把果子全装进去 那么容器最小可以是多小

    很显然 如果我们的容器每一个都能把全部的果子装进去 那么一定是一种可行的解 但不是最优的

    容器最小是多小呢?至少要能装得下最大的果子

    所以答案就在 maxAi 和 sumAi 之间 进行二分查找即可

    如果当前的mid是容器的容量,求出来需要多少容器 如果比 m 多 那么说明 mid 太小了 如果小于等于 m 那么就看看还有没有可以更小一点的容量

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n,m,a[100005];
    
    void erfen(int l,int r)
    {
        int i;
        if(l>=r)
        {
            cout<<l<<endl;
            exit(0);
        }
        int mid=(r+l)/2;
        int sumn=0;
        int k=1;
        for(i=0;i<n;i++)
        {
            sumn+=a[i];
            if(sumn>mid)
            {
                sumn=a[i];
                k++;
                if(k>m)
                break;
            }
        }
        if(k>m)
        {
            erfen(mid+1,r);
        }
        else
        {
            erfen(l,mid);
        }
        
    }
    
    
    int main()
    {
        int i,maxn=0,sumn=0;
        cin>>n>>m;
        for(i=0;i<n;i++)
        {
            cin>>a[i];
            maxn=max(a[i],maxn);
            sumn+=a[i];
        }
        erfen(maxn,sumn);
    }
  • 相关阅读:
    四则运算 2
    《你的灯亮着吗》读后感 (前两篇)
    四则运算设计思路
    读书目标
    课堂总结
    人月神话感想
    软件工程概论11
    软件工程概论10
    bnu——GCD SUM (莫比乌斯反演)
    POJ1108_Split Windows 解题报告
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/10965811.html
Copyright © 2011-2022 走看看