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; 
    }
    
  • 相关阅读:
    sql -- 获取商品分类的最新销售情况
    sql -- 获取连续签到的用户列表
    sql -- 利用order by 排名作弊
    sql -- update表子查询、多条件判断case when
    sql-- 找到重复数据并删除、有重复数据不插入或更新的处理方法
    sql--自链接(推荐人)
    sql--测试商品的重要度,是否需要及时补货
    sql面试题
    TCP/IP 3次握手
    REST和SOAP
  • 原文地址:https://www.cnblogs.com/andysj/p/14026587.html
Copyright © 2011-2022 走看看