zoukankan      html  css  js  c++  java
  • UVA 714 二分最大化最小值

    题意:输入t表示有多个样例,输入n,group表示有n个数分为group组使每组和最小

    输出‘/’时注意格式。

    #include<iostream>  
    #include<string.h>  
    using namespace std;  
    #define ll long long  
    const int N = 500 + 5;  
    ll a[N];  
    int vis[N];  
    ll num,m,group;  
    
    int solve(int d)
    {
        ll sum=0; int k=1;
        for(int i=0;i<num;i++)
        {
            if(a[i]+sum<=d)
                sum+=a[i];
            else
            {
                sum=a[i];
                k++;
            }
        }
        if(k<=group)
            return 1;
        else
            return 0;
    }
    void out()
    {
        memset(vis,0,sizeof(vis));
        int k=1; ll sum=0;
        for(int i=num-1;i>=0;i--)//从后开始确定‘/’的位置
        {
            if(sum+a[i]<=m)
            {
                sum+=a[i];
            }
            else//确定划分的位置
            {
                k++;
                sum=a[i];
                vis[i]=1;
            }
        }
        for(int i=0;i<num&&k<group;i++)//输出‘/’可能小于需要的分组数,从前向后增加分组
        {
            if(!vis[i])
            {
                vis[i]=1; k++;
            }
        }
        for(int i=0;i<num-1;i++)
        {
            cout<<a[i]<<" ";
            if(vis[i])
                cout<<"/ ";
        }
        cout<<a[num-1]<<endl;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            ll sum=0;m=0;
            cin>>num>>group;
            for(int i=0;i<num;i++)
            {
                cin>>a[i];
                sum+=a[i];
                if(m<a[i])
                    m=a[i];
            } 
            int mid=(m+sum)/2;
            while(sum>m)
            {
                if(solve(mid))
                {
                    sum=mid;
                }
                else
                    m=mid+1;
                mid=(sum+m)/2;
            }
        //    cout<<mid<<endl;
            out();
        }
        return 0;
     } 
  • 相关阅读:
    Servlet接口实现类开发步骤
    Servlet概述
    Web服务器之HTTP协议与Tomcat服务器
    vant中van-picker选项插入图片
    排序算法-插入排序
    排序算法-快速排序
    排序算法-冒泡排序
    浅谈C#中Dictionary的实现。
    设计模式(23)-备忘录模式
    设计模式(22)-访问者模式
  • 原文地址:https://www.cnblogs.com/renwjing/p/7392334.html
Copyright © 2011-2022 走看看