流水作业调度(dp)
来源:互联网 发布:vb编写简单整人小程序 编辑:程序博客网 时间:2024/05/26 07:29
题目:
n个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。
流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。
代码:
#include <bits/stdc++.h>using namespace std;const int MAXN=1010;struct node{ int min_cost,index; bool flag;};node d[MAXN];bool cmp(node a,node b){ return a.min_cost<b.min_cost;}int main(){ int n,a[MAXN],b[MAXN],bq[MAXN]; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]>>b[i]; d[i].min_cost=min(a[i],b[i]); d[i].index=i; d[i].flag=a[i]<b[i]; } sort(d+1,d+1+n,cmp); int head=1,tail=n; for(int i=1;i<=n;i++) if(d[i].flag) bq[head++]=d[i].index; else bq[tail--]=d[i].index; int k,t; k=a[bq[1]]; t=k+b[bq[1]]; for(int i=2;i<=n;i++) { k+=a[bq[i]]; t=k<t?(t+b[bq[i]]):(k+b[bq[i]]); } for(int i=1;i<=n;i++) cout<<bq[i]<<" "; cout<<endl<<t<<endl; return 0;}
测试数据:
6
2 5
7 3
6 2
4 7
6 9
8 2
输出:
1 4 5 2 6 3
35
阅读全文
0 0
- 流水作业调度(dp)
- dp:流水作业调度问题
- 流水作业调度(动态规划)
- 流水作业调度
- 流水作业调度
- 加工生产调度(Johnson算法 双机流水作业调度问题)
- 流水作业调度问题(转)
- 最优流水作业调度
- 最优流水作业调度
- 流水作业调度-动态规划
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 流水作业调度问题
- 动态规划解决流水作业调度(Johnson法则)
- c++ 算法设计与分析(第四版) 流水作业调度
- 流水作业调度(动态规划)-算法设计与分析
- 去掉返回数据字符中“/”
- 搜索框—— SearchView
- sql server如何编辑超过前200行的数据
- CentOS6.8手动安装MySQL5.6
- ECMAscript5
- 流水作业调度(dp)
- tensorflow中的矩阵生成(数据初始化)与变换函数
- 轮播Banner使用简单集成
- 自定义View(四):onDraw()绘图详解
- js中阻止事件冒泡
- [RMQ之稀疏表(ST表)讲解及例题][POJ 3264]Balanced Lineup
- java定时调度工具quartz
- php 获取数组第一个元素 以及最后一个元素 && 最后一个元素的键名
- 55. Jump Game 【Medium】 贪心算法