1. 程式人生 > >2.最佳調度問題

2.最佳調度問題

ios int ans stdin 時間 code ring 設計 nbsp

2.最佳調度問題
(machine.pas/c/cpp)
【問題描述】
假設有n個任務由k個可並行工作的機器完成。完成任務i需要的時間為ti。試設計一個算法找出完成這n個任務的最佳調度,使得完成全部任務的時間最早。
【編程任務】
對任意給定的整數n(<=20)和k(<=10),以及完成任務i需要的時間為ti,i=1~n。編程計算完成這n個任務的最佳調度。
【輸入格式】
由文件machine.in給出輸入數據。第一行有2 個正整數n和k。第2 行的n個正整數(<=10000)是完成n個任務需要的時間。
【輸出格式】
將計算出的完成全部任務的最早時間輸出到文件machine.out。
【輸入樣例】
7 3
2 14 4 16 6 5 3
【輸出樣例】
17

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[25],b[15],ans;
int n,k;
bool cmp1(int a,int b)
{
    return a>b;
}
int greedy(){
    sort(a+1,a+1+n,cmp1);
    for(int j=1;j<=n;j++)
    {
        b[1]+=a[j];
        sort(b
+1,b+1+k); } return ans=b[k]; } void dfs(int s,int t) { if(t>=ans)return; if(s>n){ ans=min(ans,t);return; } for(int i=1;i<=k;i++) { b[i]+=a[s]; dfs(s+1,max(b[i],t)); b[i]-=a[s]; } } int main() { freopen(
"machine.in","r",stdin); freopen("machine.out","w",stdout); cin>>n>>k; for(int i=1;i<=n;i++)cin>>a[i]; greedy(); memset(b,0,sizeof(b)); dfs(1,0); cout<<ans<<endl; }

2.最佳調度問題