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);
    }
  • 相关阅读:
    Spring入门第二十九课
    Spring入门第二十八课
    Spring入门第二十七课
    Spring入门第二十六课
    Spring入门第二十五课
    Spring入门第二十四课
    Spring入门第二十三课
    Spring入门第二十二课
    Spring入门第二十一课
    Spring入门第二十课
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/10965811.html
Copyright © 2011-2022 走看看