zoukankan      html  css  js  c++  java
  • [Luogu] P1248 加工生产调度

    (Link)

    Description

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

    某个产品(i)(A、B)两车间加工的时间分别为(A_i,B_i)​。怎样安排这(n)个产品的加工顺序,才能使总的加工时间最短。

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

    Solution

    一旦(A)车间开始加工,则(A)车间就会不停地进行作业,关键是(B)车间在加工过程中有可能要等待(A)车间。很明显第一个产品在(A)车间上加工时,(B)车间必须等待,最后一个产品在(B)车间上加工时,(A)车间也在等待(B)车间的完工。

    所以我们要做的事就是:

    (1)就要把在(A)车间加工时间最短的部件优先加工,这样使得(B)车间能以最快的速度开始加工

    (2)把放在(B)车间加工时间最短的产品放在最后加工,这样使得最后(A)车间的空闲时间最少

    Code

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int n, ta, tb, l, r, a0[1005], b0[1005], ord[1005];
    
    struct node
    {
    	int a, b, id;
    }p[1005];
    
    int read()
    {
    	int x = 0, fl = 1; char ch = getchar();
    	while (ch < '0' || ch > '9') { if (ch == '-') fl = -1; ch = getchar();}
    	while (ch >= '0' && ch <= '9') {x = (x << 1) + (x << 3) + ch - '0'; ch = getchar();}
    	return x * fl;
    }
    
    int cmp(node x, node y)
    {
    	return min(x.a, x.b) < min(y.a, y.b);
    }
    
    int main()
    {
    	n = read();
    	for (int i = 1; i <= n; i ++ )
    		p[i].a = read(), a0[i] = p[i].a;
    	for (int i = 1; i <= n; i ++ )
    		p[i].b = read(), b0[i] = p[i].b;
    	for (int i = 1; i <= n; i ++ )
    		p[i].id = i;
    	sort(p + 1, p + n + 1, cmp);
    	l = 0; r = n + 1;
    	for (int i = 1; i <= n; i ++ )
    		(p[i].a < p[i].b) ? ord[ ++ l] = p[i].id : ord[ -- r] = p[i].id;
    	for (int i = 1; i <= n; i ++ )
    	{
    		ta += a0[ord[i]];
    		tb = max(ta, tb) + b0[ord[i]];
    	}
    	printf("%d
    ", tb);
    	for (int i = 1; i <= n; i ++ )
    		printf("%d ", ord[i]);
    	puts("");
    	return 0; 
    }
    
  • 相关阅读:
    DBCP,C3P0与Tomcat jdbc pool 连接池的比较
    MySQL:创建、修改和删除表
    MySQL添加用户、删除用户与授权
    王垠 :写给支持和反对《完全用Linux工作》的人们 ( 2004/8/26)
    王垠:完全用Linux工作 (2003)
    王垠:什么是“对用户友好”(2012/05/18)
    顿悟:Linux是拿来用的,不是拿来折腾的
    《从零开始搭建游戏服务器》MySQL安装配置
    ehcache 缓存
    servlet
  • 原文地址:https://www.cnblogs.com/andysj/p/14026587.html
Copyright © 2011-2022 走看看