51Nod - 1205 (流水先调度)超级经典的贪心 模板题
题目链接: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 ;
}
51Nod - 1205 (流水先调度)超级经典的贪心 模板题的更多相关文章
- 51nod(1174 区间中最大的数)(ST表模板题)
1174 区间中最大的数 1.0 秒 131,072.0 KB 0 分 基础题 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. 例如: 1 ...
- 51NOD 1006 最长公共子序列 Lcs 动态规划 DP 模板题 板子
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...
- 51nod 1205 流水线调度
1205 流水线调度 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 N个作业{1,2,…,n}要在由2台机器M1和M2组成的流水线上完成加工.每个 ...
- C语言超级经典400道题目
C语言超级经典400道题目 1.C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符.C.1 2.C语言程序的三种基本结构是____构A.顺序结构,选择结构,循环结 B.递 ...
- 流水车间调度算法分析的简单+Leapms实践--混合整数规划的启发式建模
流水车间调度算法分析的简单+Leapms实践--混合整数规划的启发式建模 清华大学出版社出版的白丹宇教授著作<流水车间与开放车间调度算法渐近分析>采用渐近分析方法分析多个NP-难类启发调度 ...
- Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- 毕向东—Java基础知识总结(超级经典)
Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...
- HDU 1180 诡异的楼梯(超级经典的bfs之一,需多回顾)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) ...
- 50道经典的JAVA编程题(汇总)
这是一次不可思议的编程历程.从2013年的最后一天开始做这份题,中间连续好几天的考试,包括java考试(今天考试的JAVA编程题),直到今天完成了.挺有成就感的...废话不多说了,来电实质性的吧. 全 ...
随机推荐
- Collatz 序列、逗号代码、字符图网格
1.collatz序列 编写一个名为 collatz()的函数,它有一个名为 number 的参数.如果参数是偶数, 那么 collatz()就打印出 number // 2,并返回该值.如果 num ...
- 使用JS完成注册表单的数据校验
1.前台校验 防君子不防小人 JavaScript被设计用来向HTML页面添加交互行为 JavaScript是一种脚本语言(脚本语言是一种轻量级的编程语言) JavaScript由数行可执行计算机代码 ...
- 子div设置float后会导致父div无法自动撑开
本文是从简书复制的, markdown语法可能有些出入, 想看"正版"和更多内容请关注 简书: 小贤笔记 注: 文章部分转载 彩泉 - 博客园 原因:内部的DIV因为float:l ...
- 利用 Task\Query 实现定位 , FeatureLayer 的属性查询
放纵了几天,又有了学习的动力.今天实现了利用对 FeatureLayer 进行属性查询在地图上进行跳转. 一.我下载了一幅浙江省的县界面地图,存在NAME字段,利用Name就能进行查询了: var n ...
- 各种优化方法总结比较(sgd/momentum/Nesterov/adagrad/adadelta)
前言 这里讨论的优化问题指的是,给定目标函数f(x),我们需要找到一组参数x,使得f(x)的值最小. 本文以下内容假设读者已经了解机器学习基本知识,和梯度下降的原理. SGD SGD指stochast ...
- Oracle中创建Job实现自动插入值操作
在PL/SQL Developer中创建Job --临时测试表 create table test_job ( id ), c_date date ); --临时序列 create sequence ...
- c++开发ocx入门实践一
原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51374200 最近项目中利用ocx封装了底层视频播放及处理的控件,以供c#和web调用.对 ...
- Python爬虫教程-28-Selenium 操纵 Chrome
我觉得本篇是很有意思的,闲着没事来看看! Python爬虫教程-28-Selenium 操纵 Chrome PhantomJS 幽灵浏览器,无界面浏览器,不渲染页面.Selenium + Phanto ...
- bitekind
xrp这个人到SNT家坐在IOST的椅子上,喝着THETA. 武之巅峰,是孤独,是寂寞,是漫漫求索,是高处不胜寒 逆境中成长,绝地里求生,不屈不饶,才能堪破武之极道. 凌霄阁试炼弟子兼扫地 ...
- 24点-code1
#include <iostream> #include <string> #include <cstdlib> #include <cmath> us ...