zoukankan      html  css  js  c++  java
  • 题目:任务分配

    题目描述

    图书馆按顺序排列有N本书需要维护,每本书的总页数不相同。现有M位员工。可以给每个员工分配连续的一段书籍,让他进行维护。现在的问题是,怎么样分配,工作任务最重(需要维护的页数最多)的人维护的页数尽量少。

    【数据规模和约定】
    N<=10^5,M<=N。一本书的页数最多10^4。

    输入格式

    第一行两个数,N、M。接下来N行,每行一个整数,表示一本书的页数。

    输出格式

    任务最重的人最少需要维护的页数。

    代码实现:

    #include<iostream>
    using namespace std;

    int a[100001],m,n,mid;

    int check(){
        int i=1,j=1,l=0;
        while(i<=n)
        {
         l+=a[i];
         if(l>mid) {j++;l=a[i];}   
         i++;         
                   }
         if(j<=m) return 1;
         else return 0;  
        }

    int main()
    {
        int i,j,left=0,right=0;
        cin>>n>>m;
        for(i=1;i<=n;i++)
        {
         cin>>a[i];
         right+=a[i];
         if(a[i]>left) left=a[i];
                         }
       
        while(left<right)
        {
         mid=(left+right)/2;
         if(check())
         right=mid;
         else left=mid+1; 
                         }

        cout<<right;
        return 0;
        }

  • 相关阅读:
    碰到一个在app内部浏览器锚点异常的问题
    常用js方法
    preg_match_all正则表达式的基本使用
    无线路由器WDS 桥接设置方法
    链表和数组的区别在哪里?
    php报错: PHP Warning: PHP Startup: memcache: Unable to initialize module
    mysql修改密码
    快速排序
    vuex到底是个啥
    vue实现简单表格组件
  • 原文地址:https://www.cnblogs.com/noip/p/2315120.html
Copyright © 2011-2022 走看看