1. 程式人生 > >第七道(DFS):最佳排程問題

第七道(DFS):最佳排程問題

最佳排程問題

Time Limit: 1000 ms   Memory Limit: 128 MB

Description

【問題描述】 
       假設有n個任務由k個可並行工作的機器完成。完成任務i需要的時間為ti。試設計一個演算法找出完成這n個任務的最佳排程,使得完成全部任務的時間最早。 
【程式設計任務】 
       對任意給定的整數n和k,以及完成任務i需要的時間為ti,i=1~n。程式設計計算完成這n個任務的最佳排程。

Input

由檔案machine.in給出輸入資料。第一行有2 個正整數n和k。第2 行的n個正整數是完成n個任務需要的時間。

Output

 將計算出的完成全部任務的最早時間輸出到檔案machine.out。 

Sample Input

7  3
2  14  4  16  6  5  3

Sample Output

17

AC CODE:

#include<bits/stdc++.h>
using namespace std;
int n,k;
int sum=99999999;
int a[6666],b[6666];
void dfs(int ta,int tb){
	if(sum<=tb)return;
	if(ta>n){
		if(sum>tb)sum=tb;
		return;
	}
	for(int i=0;i<k;++i){
		if(b[i]+a[ta]<sum){
			b[i]+=a[ta];
			dfs(ta+1,max(tb,b[i]));
			b[i]-=a[ta];
		}
	}
	return;
}
int main(){
	cin>>n>>k;
	for(int i=0;i<n;++i)cin>>a[i];
	dfs(0,0);
	cout<<sum;
}