zoukankan      html  css  js  c++  java
  • 题解 P1248 【加工生产调度】

    题目

    某工厂收到了 n 个产品的订单,这 n 个产品分别在 A、B 两个车间加工,并且必须先在 A 车间加工后才可以到 B 车间加工。

    某个产品 i 在 A、B 两车间加工的时间分别为 Ai,Bi

    怎样安排这 n 个产品的加工顺序,才能使总的加工时间最短。

    这里所说的加工时间是指:从开始加工第一个产品到最后所有的产品都已在 A、B 两车间加工完毕的时间

    贪心

    mind

    排序

    考虑两个产品, 在A中加工时间a1,a2,在B中加工的时间为b1,b2

    假设先加工产品1的方案较优

    先加工1, time: a1+max(b1,a2)+b2

    先加工2, time: a2+max(b2,a1)+b1

    得到: a1+max(b1,a2)+b2 < a2+max(b2,a1)+b1

    移项,得到 max(b1,a2)-a2-b1 < max(b2,a1)-b2-a1

    手摸一下阔以知道: -min(b1,a2) < -min(b2,a1)

    也就是 min(a1,b2)<min(2,b1)

    按照这个排序

    dalao们都说该式子不具传递性

    详见……

    怎么求值??

    还是考虑两个产品

    根据图像显而易见了(from:_ztyqwq)


    这种情况下 Aj <= Bi,time = Ai + Bi + Bj


    这种情况下 Aj > Bi, time = Ai + Aj + Bj

    综上:总时间为:Ai + max(Aj,Bi) + Bj

    代码

    /*
    work by:Ariel
    */
    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int M = 1e4 + 4;
    typedef long long ll;
    int read(){
       int x = 0,f = 1;char c = getchar();
       while(c < '0'||c > '9'){if(c == '-')f = -1;c = getchar();}
       while(c >= '0'&&c <= '9'){x = x*10 + c - '0';c = getchar();}
       return f*x;
    }
    struct node{
    	int a,b,num;
    }work[M];
    int ans;
    bool cmp(node x,node y){
        return min(x.a , y.b) < min(y.a , x.b);
    }
    int tima,timb;
    int main()
    {
      int n = read();
      for(int i = 1;i <= n; i++){
      	 work[i].a = read();
      	 work[i].num = i;
      }
      for(int i = 1;i <= n; i++){
      	 work[i].b = read();
      }
      sort(work + 1, work + n + 1, cmp);
      for(int i = 1;i <= n; i++){
      	 tima += work[i].a;
      	 timb = max(tima, timb) + work[i].b;
      }
        cout << timb <<"
    ";
        for (int i = 1; i < n; i++) {
            cout << work[i].num << " ";
        }
        cout << work[n].num;
      return 0;
    }
    
    
  • 相关阅读:
    The formatter threw an exception while trying to deserialize the message in WCF
    通过Web Deploy方式部署WCF
    The Managed Metadata Service or Connection is currently not available
    How to create Managed Metadata Column
    冒泡算法
    asp.net core 实战项目(一)——ef core的使用
    Vue学习笔记入门篇——安装及常用指令介绍
    Vue学习笔记入门篇——数据及DOM
    Vue学习笔记目录
    Chart.js在Laravel项目中的应用
  • 原文地址:https://www.cnblogs.com/Arielzz/p/14158209.html
Copyright © 2011-2022 走看看