第七道(DFS):最佳排程問題
阿新 • • 發佈:2019-01-31
最佳排程問題
Time Limit: 1000 ms Memory Limit: 128 MBDescription
【問題描述】假設有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; }