码迷,mamicode.com
首页 > 其他好文 > 详细

2.最佳调度问题

时间:2017-10-06 22:28:37      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:name   mac   main   一个   cst   col   div   sort   mem   

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.最佳调度问题

标签:name   mac   main   一个   cst   col   div   sort   mem   

原文地址:http://www.cnblogs.com/EdSheeran/p/7632985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!