题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1205

N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为aii和bii。你可以安排每个作业的执行顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。求这个最少的时间。

 

Input第1行:1个数N,表示作业的数量。(2 <= N <= 50000)
第2 - N + 1行:每行两个数,中间用空格分隔,表示在M1和M2上加工所需的时间aii, bii。(1 <= aii, bii <= 10000)。Output输出完成所有作业所需的最少时间。Sample Input

4
3 7
2 1
1 1
4 2

Sample Output

14

分析:
思路:Johnson算法:
1:将任务分为两类,A类任务t1<t2,B类任务t1>=t2
2:两类任务分别排序,其中A类按 t1 递增排序,B类按 t2 递减排序
3:合并两类,将第二类任务接到第一类任务后面,此时任务的顺序最佳
4:遍历所有任务,计算总耗时 比如样例排序好之后是:
A:3 7
B:4 2
C:2 1
D:1 1
先在机器1完成A的3,然后在机器1进行B的4时,同时在机器2进行A的7,然后在机器1进行C的2,然后在机器1进行D的1,这段时间机器2都是
被A的7占领的,所以答案是:3+7+2+1+1=14 code:
#include<stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <queue>
#include<string.h>
using namespace std;
#define max_v 50005
struct node
{
int x,y;
}p[max_v],pp[max_v];
bool cmp1(node a,node b)
{
return a.x<b.x;
}
bool cmp2(node a,node b)
{
return a.y>b.y;
}
int f[max_v];
int main()
{
int n;
while(~scanf("%d",&n))
{
int len1=,len2=;
int x,y;
for(int i=;i<n;i++)
{
scanf("%d %d",&x,&y);
if(x<y)
{
p[len1].x=x;
p[len1++].y=y;
}else
{
pp[len2].x=x;
pp[len2++].y=y;
}
}
sort(p,p+len1,cmp1);
sort(pp,pp+len2,cmp2);
for(int i=len1;i<len1+len2;i++)
{
p[i]=pp[i-len1];
}
for(int i=;i<len1+len2;i++)
{
printf("%d %d\n",p[i].x,p[i].y);
}
printf("\n");
f[]=p[].x;
for(int i=;i<n;i++)
{
f[i]=f[i-]+p[i].x;
}
for(int i=;i<n;i++)
{
printf("%d ",f[i]);
}
printf("\n\n");
int sum=;
for(int i=;i<n;i++)
{
if(sum>=f[i])
{
sum+=p[i].y;
}else
{
sum=f[i]+p[i].y;
}
}
printf("%d\n",sum);
}
return ;
}


最新文章

  1. supervisord安装使用简记
  2. java接口的嵌套
  3. 撑100s小游戏
  4. 关于HTML5你必须知道的28个新特性,新技巧以及新技术
  5. 【Android Demo】简单手机通讯录
  6. 007医疗项目-模块一:用户的查找:3.用户表查询的Action和Service
  7. OC7_单词个数
  8. paip.输入法编程---带ord gudin去重复-
  9. PySide——Python图形化界面
  10. 在vim中,使用可视化拷贝(剪切)粘贴文本
  11. PHP+MySql实现后台数据的读取
  12. PAT 1008. Elevator (20)
  13. 关于PHP架构师进阶的一些思考
  14. BOM基础 计时器 定时器 DOM 基础
  15. libsecp256k1 与 openssl ecdsa
  16. Centos 7 搭建.net web项目
  17. es6中的函数
  18. Images之Dockerfiles
  19. Spark wordcount开发并提交到集群运行
  20. svn+apache+ssl快速部署

热门文章

  1. hdu 3535 (最少1,最多1,任意)(背包混合)(好题)
  2. Jvm性能监控和常用工具
  3. thinkphp session设置
  4. 深入理解ES6之函数
  5. js小数转分数-近似递归
  6. codeforces之始
  7. 如何定位 Node.js 的内存泄漏
  8. 【转】Silverlight无法添加服务引用
  9. 【Udacity】解决:字幕遮挡视频内容怎么办?Udacity字幕大小调整
  10. layui分页