• 最大值最小化


    贪心+二分入门题:

    #include <iostream>
    #include<string.h>
    #include<algorithm>
    #include<cstdio>
    #define CLR(arr,val) memset(arr,val,sizeof(arr))
    using namespace std;
    void in(int &a)
    {
        char ch;
        while((ch=getchar())<'0'||ch>'9');
        for( a=0;ch>='0'&&ch<='9';ch=getchar()) a=a*10+ch-'0';
    
    }
    /*int d,x,y;
    void extend_gcd(int a,int b,int& d,int& x,int& y)
    {
        if(b==0)
        {
            d=a;
            x=1;
            y=0;
            return;
        }
       extend_gcd(b,a%b,d,x,y);
        int t=x-(a/b)*y;
            x=y;
            y=t;
    }
    int main()
    {
        int a,b;
        while(cin>>a>>b)
        {
           extend_gcd(a,b,d,x,y);
           while(x<0) x+=b;
           cout<<x<<endl;
        }
        return 0;
    }
    */
    #define N 10005
    int p[N],n,m,maxx,sum;
    void input()
    {
        maxx=-1,sum=0;
        for(int i=0;i<n;++i)
        {
            cin>>p[i];
            if(maxx<p[i]) maxx=p[i];
            sum+=p[i];
        }
    }
    bool _test(int  t)
    {
        bool flag=true;
        int s=0,num=0;
        for(int i=0;i<n;++i)
        {
            if(p[i]>t)
            {
                flag=false;
                break;
            }
            if(s+p[i]>t)
            {
                s=p[i];
                num++;
                if(num>m-1)
                {
                    flag=false;
                    break;
                }
    
            }
            else
            {
                s+=p[i];
            }
        }
        return flag;
    }
    int bin_search()
    {
        int l=maxx,r=sum;
        while(l<=r)
        {
            int mid=(l+r)>>1;
            if(_test(mid)) r=mid-1;
            else           l=mid+1;
        }
        return l;
    }
    int main()
    {
        int T;
        cin>>T;
        while(T--)
        {
        cin>>n>>m;
        input();
        cout<<bin_search()<<endl;
        }
        return 0;
    }
    


  • 相关阅读:
    四则运算02
    第三周学习进度条
    《构建之法》阅读笔记1
    第二周学习进度条
    四则运算01
    第八周进度条
    每日站立会日07,08
    每日站立会议06
    每日站立会议05
    每日站立会议04
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3119956.html
Copyright © 2020-2023  润新知