码迷,mamicode.com
首页 > 其他好文 > 详细

codevs 1766 分果子

时间:2018-02-25 00:10:49      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:def   最小值   split   using   个数   span   namespace   nbsp   cin   

#include<iostream>
using namespace std;
#define MAX 100000+200
long long wei[MAX];
long long n,m;
/* 袋子的最小值是最大一堆果子的体积,最大值是所有果子的体积
函数 参数是此时袋子的体积v
*/

long long split(long long v)
{
    long long num = 1,hold =0;//num存放已使用多少个袋子,hold表示当前袋子已经装了多少
    for(long i=0;i<n;i++)
    {
        hold += wei[i];
        if(hold>v)
        {
            num++;
            hold = wei[i];
        }
    }
    return num;   //返回所使用袋子的个数
}

void solve(long long l,long long h)
{
    long long lw = l,hw = h,mw ;
    for(int i=0;i<300;i++)
    {
        mw = (lw+hw)/2;
        if(split(mw)>m)
        {
            lw = mw;
        }else{
            hw = mw;
        }
    }


    cout<<hw<<endl;
}

int main()
{
    long long sumw = 0,maxw = 0;
    cin>>n>>m;//m袋子的总个数,n是果树的总个数
    for(long  i=0;i<n;i++)
    {
        cin>>wei[i];
        sumw+=wei[i];
        maxw = max(maxw,wei[i]);
    }
    solve(maxw,sumw);
    return 0;
}

 

codevs 1766 分果子

标签:def   最小值   split   using   个数   span   namespace   nbsp   cin   

原文地址:https://www.cnblogs.com/desserts/p/8467853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!