題目鏈結
這個題可以貪心
我們首先想:對於所有產品,我們大致可以將其分為三類:
①.在a車間的時間要比b車間長。
②.兩者一樣。
③.在b車間的時間要比a車間長。
對於這三大類,怎麼安排順序?
可以看出,①類是消耗b車間任務,③類是給b車間增加任務。
我們想,要想時間最快,必須要盡可能的讓ab兩車間沒有空閒的工作。如果我們將①放在了開頭,而③放在了結尾,那必然會導致開始時b工作的時間斷斷續續,最後等a工作完了,b還剩下一大堆任務。
所以我們要盡可能的將③放在開始,①放在結尾,②安排在中間就可以(沒有什麼影響)。
三大類排好順序後,我們再想每一類內部之間的順序:
對於①:放在結尾執行,到最後必然a全部執行完畢,b還剩一點沒執行(因為a最後執行的產品剛剛歸入b類),那我們此時所消耗的時間就是最後產品的b車間時間,當然是越小越好,所以③類要按照b從大到小排。
對於②:好像既然放在了中間,就無所謂了。
對於③:同①理,放在開始執行,一開始必然第乙個任務執行a時,b此時空著,那我們此時所消耗的時間就是開始產品的a車間時間,當然是越小越好,所以①類要按照a從小到大排。
然後從頭到尾模擬一遍就行了。
**:
#include #include#include
#include
#include
using
namespace
std;
intn;
struct
qwqe[
1005
];int cmp(qwq &a,qwq &b)
inline
intread()
returnx;}
inttime_c,cha;
intmain()
sort(e+1,e+n+1
,cmp);
for(int i=1;i<=n;i++)
cout
for(int i=1;i<=n;i++)
printf(
"%d
",e[i].id);
return0;
}
Luogu P1248 加工生產排程 題解報告
題目傳送門 題目大意 有 n 個任務要在兩個流水線上完成,第 i 個任務在第乙個流水線上需要 a i 的時間完成,在第二個流水線上需要 b i 的時間完成。每個任務要現在第乙個流水線上完成之後才可以到第二個流水線上開始工作,求如何安排可以使得總時間最短。思路分析 這個題目直接看好像有點複雜?我們先來...
LUOGU P2440 木材加工
思路 二分,對莫乙個長度計算總段數,計算出的總段數與題意比較,若總段數小於題目要求,長度減小,反之,長度變大 時間複雜度 o nlogn include include using namespace std typedef long long ll ll a 100050 ll n,k 判斷長度為...
luogu p2440 木材加工
傳送門 要保護環境 木材廠有一些原木,現在想把這些木頭切割成一些長度相同的小段木頭 木頭有可能有剩餘 需要得到的小段的數目是給定的。當然,我們希望得到的小段木頭越長越好,你的任務是計算能夠得到的小段木頭的最大長度。木頭長度的單位是cm。原木的長度都是正整數,我們要求切割得到的小段木頭的長度也是正整數...