洛谷P2751 [USACO4.2]工序安排Job Processing
P2751 [USACO4.2]工序安排Job Processing
- ?
- 18通過
- 78提交
- 題目提供者該用戶不存在
- 標簽
- 難度普及+/提高
?提交??討論??題解??
最新討論
- 暫時沒有討論
題目描述
一家工廠的流水線正在生產一種產品,這需要兩種操作:操作A和操作B。每個操作只有一些機器能夠完成。
Ioi96d1.gif
上圖顯示了按照下述方式工作的流水線的組織形式。A型機器從輸入庫接受工件,對其施加操作A,得到的中間產品存放在緩沖庫。B型機器從緩沖庫接受中間產品,對其施加操作B,得到的最終產品存放在輸出庫。所有的機器平行并且獨立地工作,每個庫的容量沒有限制。每臺機器的工作效率可能不同,一臺機器完成一次操作需要一定的時間。
給出每臺機器完成一次操作的時間,計算完成A操作的時間總和的最小值,和完成B操作的時間總和的最小值。
注:1、機器在一次操作中干掉一個工件; 2、時間總和的意思是最晚時間點
輸入輸出格式
輸入格式:
第一行 三個用空格分開的整數:N,工件數量 (1<=N<=1000);M1,A型機器的數量 (1<=M1<=30);M2,B型機器的數量 (1<=M2<=30)。
第二行…等 M1個整數(表示A型機器完成一次操作的時間,1..20),接著是M2個整數(B型機器完成一次操作的時間,1..20)
輸出格式:
只有一行。輸出兩個整數:完成所有A操作的時間總和的最小值,和完成所有B操作的時間總和的最小值(A操作必須在B操作之前完成)。
輸入輸出樣例
輸入樣例#1:
5 2 3
1 1 3 1 4
輸出樣例#1:
3 5
說明
? ? ? ? ? ? ? ? ? ? ? ?
題目翻譯來自NOCOW。
USACO Training Section 4.2
分析:因為要使最后結束的時間盡量提前,如果一個產品在A操作和B操作上用時非常短,那么必然會有一個A操作和B操作用時很長,這樣的話不是最優解,我們就要想辦法把這些時間平均,很顯然,A操作第i個完成的配B操作第n-i+1個完成的(A操作和B操作都是排好序的,具體為什么,請繼續看)
???? 那么怎么求第i個產品在A操作和B操作上的用時呢?每個機器加工一個產品的個數都是一定的,要使A操作和B操作有序,那么就要使第i個產品最先完成,開一個數組表示每個機器當前的時間,找當前時間+1個產品的加工時間最少的插入就行.
???? 回到上面,A操作第i個完成的配B操作第n-i+1個完成可以看做第i個產品在A機器上和B機器上所分配的最平均的時間.
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm>using namespace std;int n, m1, m2,a[35],b[35],t[1010],t1[1010],t2[1010],cur,temp;int main() {scanf("%d%d%d", &n, &m1, &m2);for (int i = 1; i <= m1; i++)scanf("%d", &a[i]);for (int j = 1; j <= m2; j++)scanf("%d", &b[j]);for (int i = 1; i <= n; i++){temp = 10000000000;for (int j = 1; j <= m1; j++)if (t[j] + a[j] < temp){temp = t[j] + a[j];cur = j;}t[cur] = t1[i] = temp;}printf("%d ", temp);memset(t, 0, sizeof(t));for (int i = 1; i <= n; i++){temp = 10000000000;for (int j = 1; j <= m2; j++)if (t[j] + b[j] < temp){temp = t[j] + b[j];cur = j;}t[cur] = t2[i] = temp;}int ans = 0;for (int i = 1; i <= n; i++)if (t1[i] + t2[n - i + 1] > ans)ans = t1[i] + t2[n - i + 1];printf("%d\n", ans);//while (1);return 0; }?
轉載于:https://www.cnblogs.com/zbtrs/p/5974846.html
總結
以上是生活随笔為你收集整理的洛谷P2751 [USACO4.2]工序安排Job Processing的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Object类有哪些公用方法?
- 下一篇: 文件互传