日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷P2751 [USACO4.2]工序安排Job Processing

發布時間:2024/4/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。