• 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;
     } 
  • 相关阅读:
    Java并发编程笔记——技术点汇总
    Hello Blog
    shell变量
    认识bash这个shell
    使用myeclipse创建带注解的model实体类
    python List,切片的用法
    ignite从0到1的学习过程记录-第一篇:安装和体验
    安卓Service完全解析(中)
    安卓Service完全解析(上)
    JAVA之数组
  • 原文地址:https://www.cnblogs.com/renwjing/p/7392334.html
Copyright © 2020-2023  润新知