zoukankan      html  css  js  c++  java
  • (贪心)多机调度问题

    某工厂有n个独立的作业,由m台相同的机器进行加工处理。作业i所需的加工时间为ti,任何作业在被处理时不能中断,也不能进行拆分处理。现厂长请你给他写一个程序:算出n个作业由m台机器加工处理的最短时间。

     输入

    第一行T(1<T<100)表示有T组测试数据。每组测试数据的第一行分别是整数n,m(1<=n<=10000,1<=m<=100),接下来的一行是n个整数ti(1<=t<=100)。

    输出

    所需的最短时间

    样例输入

    2

    2 2

    1 5

    6 3

    2 5 13 15 16 20

    样例输出

    5

    28

    这并不是一道oj上的题目,反正我是没找到。。。

    应该属于一类题目。

    解题思路就是贪心的思想。

    我们现将所有的时间排序。

    第一种情况:n<=m    时间最长的工作就是我们需要求解的总时间。

    第二种情况:n>m    

    这时候我们就将m个机器分配给前m个时间最长的工作,直到有机器空闲下来,我们将闲下的机器继续向后分配。直到分配到没有工作可做了。当前的时间再加上还没有做完的工作的最长时间就是我们所要求的总时间。

    代码:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<string.h>
     5 using namespace std;
     6 int a[1005],b[1005];   
     7 bool cmp(int a,int b){
     8     return a>b;
     9 }
    10 int main(){
    11     int n,m;
    12     int T;
    13     cin>>T;
    14     while(T--){
    15         int n,m;
    16         cin>>n>>m;
    17         for(int i=0;i<n;i++){
    18             scanf("%d",a+i);
    19         }
    20         memset(b,0,sizeof(b));
    21         sort(a,a+n,cmp);
    22         if(n<=m){
    23             cout<<a[0]<<endl;
    24             continue;
    25         }else{
    26             int sum=0;
    27             int now=m;
    28             while(now<n){
    29                 sum++;
    30                 int cnt=0;     //cnt是这分钟结束后有几台机器空闲下来
    31                 for(int i=0;i<now;i++){
    32                     b[i]++;
    33                     if(b[i]==a[i]){
    34                         cnt++;
    35                     }
    36                 }
    37                 now+=cnt;
    38             }
    39             int mx=0;
    40             for(int i=0;i<n;i++){
    41                 if(a[i]>b[i])
    42                     mx=max(mx,a[i]-b[i]);    //找出还没做完的工作的最长时间
    43             }
    44             cout<<sum+mx<<endl;
    45         }
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    设计模式(1)-行为类
    rocketmq(1)
    zookeeper(2)-curator
    Spring之HandlerInterceptor拦截器
    云之家如何获取登录用户信息?
    KDTable如何添加合计行?
    财务报表如何直接取数?
    DEP脚本
    Mybatis之关联查询及动态SQL
    Mybatis之XML、注解
  • 原文地址:https://www.cnblogs.com/ISGuXing/p/7308900.html
Copyright © 2011-2022 走看看