poj 2751 貪心(雙機排程)

2021-06-25 11:31:55 字數 734 閱讀 1555

題意:現在有2臺機器,n件任務,每件任務必須先在機器1上做,做完之後再在機器2上做,各任務之間的加工順序任意。給出每件任務在兩個機器上做的時間,求最早的完工時間.

思路:(參考的cmp函式:return x.a+max(y.a,x.b)+y.b另一種思路:1>把作業按工序加工時間分成兩個子集,第乙個集合中在s1上做的時間比在s2上少,其它的作業放到第二個集合.先完成第乙個集合裡面的作業,再完成第二個集合裡的作業。  2> 對於第乙個集合,其中的作業順序是按在s1上的時間的不減排列;對於第二個集合,其中的作業順序是按在s2上的時間的不增排列.

#include #include #include #define min(a,b) ((a)<(b)?(a):(b))

#define max(a,b) ((a)>(b)?(a):(b))

#define n 10002

struct nodes[n],t[n];

int n;

int cmp1(const struct node *a,const struct node *b)

int cmp2(const struct node *a,const struct node *b)

int main(){

freopen("a.txt","r",stdin);

while(scanf("%d",&n) && n){

int i,a,b,m1,m2;

m1 = m2 = 0;

for(i = 0;i

poj 2751 雙機排程 johnson演算法

問題就是2臺機器,n件任務,必須先在s1上做,再在s2上做。任務之間先做後做任意。求最早的完工時間。這是乙個經典問題 2臺機器的情況下有多項式演算法 johnson演算法 3臺或以上的機器是np hard的。思想就是貪心,時間複雜度是o nlogn johnson演算法 1 把作業按工序加工時間分成...

poj 貪心小結(一)

本次貪心題的練習題有 2325,3258,3122,2393,1065,1323,1328,1700 1700 經典的過河問題。兩種貪心策略,一種是最快的 最慢的,最快的回來,再最快的 次慢的,最快的回來,第二種是最快的 次快的,次快的回來,再最慢 次慢過河,在最快的回來。兩中策略的結果都是最慢的和...

POJ 2586 簡單貪心

大意是乙個公司在12個月中,或固定盈餘s,或固定虧損d.但記不得哪些月盈餘,哪些月虧損,只能記得連續5個月的代數和總是虧損 0為虧損 而一年中只有8個連續的5個月,分別為1 5,2 6,8 12 問全年是否可能盈利?若可能,輸出可能最大盈利金額,否則輸出 deficit 先判斷是否可以組成連續5個月...