多机调度问题
2012-06-04 21:10
239 查看
描述
某工厂有n个独立的作业,由m台相同的机器进行加工处理。作业i所需的加工时间为ti,任何作业在被处理时不能中断,也不能进行拆分处理。现厂长请你给他写一个程序:算出n个作业由m台机器加工处理的较短时间。
输入第一行T(1<T<100)表示有T组测试数据。每组测试数据的第一行分别是整数n,m(1<=n<=10000,1<=m<=100),接下来的一行是n个整数ti(1<=t<=100)。
输出所需的较短时间。(提示:不一定是最优解)
样例输入
样例输出
思路:对作业进行排序,如果n<=m,就是最大的作业时间;如果n>m,从最大的作业依次进行工作,每个作业接在完成的机器上,相当于银行取号系统,保证机器不空闲,直至作业做完。
某工厂有n个独立的作业,由m台相同的机器进行加工处理。作业i所需的加工时间为ti,任何作业在被处理时不能中断,也不能进行拆分处理。现厂长请你给他写一个程序:算出n个作业由m台机器加工处理的较短时间。
输入第一行T(1<T<100)表示有T组测试数据。每组测试数据的第一行分别是整数n,m(1<=n<=10000,1<=m<=100),接下来的一行是n个整数ti(1<=t<=100)。
输出所需的较短时间。(提示:不一定是最优解)
样例输入
2 2 2 1 5 6 3 2 5 13 15 16 20
样例输出
5 28
思路:对作业进行排序,如果n<=m,就是最大的作业时间;如果n>m,从最大的作业依次进行工作,每个作业接在完成的机器上,相当于银行取号系统,保证机器不空闲,直至作业做完。
#include<iostream> #include<cstring> #include<cstdlib> using namespace std; int a[10005]; int b[105]; int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; } int main() { int t; cin>>t; while(t--) { int n, m; cin>>n>>m; for(int i=0;i<n;i++) { cin>>a[i]; } qsort(a, n, sizeof(a[0]), cmp); memset(b, 0, sizeof(b)); if(n <= m) { cout<<a[n-1]<<endl; continue; } else { int max=0,min=0; int maxI, minI; for(int i=n-1;i>n-1-m;i--) { b[n-1-i]=a[i]; } min=b[m-1]; minI=m-1; max=b[0]; maxI=0; for(int i=n-1-m;i>=0;i--) { min += a[i]; b[minI] += a[i]; for(int j=0;j<m;j++) { if(b[j] >= max) { max=b[j]; maxI = j; } if(b[j] <= min) { min=b[j]; minI=j; } } } cout<<max<<endl; } } return 0; }
相关文章推荐
- 贪心之多机调度问题
- 多机调度问题
- 多机调度问题
- 多机调度问题 贪心策略
- 贪心之多机调度问题
- 多机调度问题——python实现
- 贪心算法之多机调度问题
- 多机调度问题
- 使用贪心算法求解多机调度问题的近似最优解。
- 多机调度问题的贪心解法
- 多机调度问题-贪心算法
- 多机调度问题
- 多机调度问题
- 多机调度问题
- LPT算法--时间调度问题
- 车厢调度问题-非_递归算法
- [原创] Legato 8.1 oracle full backup skip 奇怪的问题处理过程 -- 非调度日期手工运行调度也不成功(skip)
- leetcode - 646. Maximum Length of Pair Chain 【贪心 + 快排的应用+ 任务调度问题】
- 最小平均完成时间调度问题_最小化完成时间
- 简易操作系统任务调度问题