程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> poj 2751 雙機調度問題Johnson算法(貪心)

poj 2751 雙機調度問題Johnson算法(貪心)

編輯:關於C++

題意:

2台機器,n件任務,每件任務必須先在S1上做,再在S2上做。任務之間先做後做任意。求最早的完工時間。

分析:

這是一個經典問題:2台機器的情況下有多項式算法(Johnson算法),3台或以上的機器是NP-hard的。Johnson算法思想就是貪心,時間復雜度是O(nlogn) 。Johnson算法: (1) 把作業按工序加工時間分成兩個子集,第一個集合中在S1上做的時間比在S2上少,其它的作業放到第二個集合。先完成第一個集合裡面的作業,再完成第二個集合裡的作業。 (2) 對於第一個集合,其中的作業順序是按在S1上的時間的不減排列;對於第二個集合,其中的作業順序是按在S2上的時間的不增排列。

代碼:

 

//poj 2751
//sep9
#include 
#include  
using namespace std;
const int maxN=10024;
struct NODE{
	int x,y;
}a[maxN],b[maxN];
int cmp1(NODE p,NODE q)
{
	return p.xq.y;
}
int s1_finish_time[maxN];

int main()
{
	int n;
	while(scanf("%d",&n)==1&&n){
		int len1=0,len2=0;
		for(int i=0;i=s1_finish_time[i])
				sum+=a[i].y;
			else
				sum=s1_finish_time[i]+a[i].y;
		}	
		printf("%d\n",sum);
	}
	return 0;	
} 


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved