Luogu2751 [USACO Training4.2]工序安排Job Processing

你怎么搞他时间都是一样的,考虑贪心

计算第一轮的时间就直接拿堆维护每个机器的结束时间,
每次取最早的,更新每个物品的答案

考虑第二轮,每次取上轮结束时间最晚的放到结束时间最早的机器里
这样一定是最优的

由于 a 类机器和 b 类机器是分开工作的,所以就直接这样贪心就好了



代码:

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cstdio>
#include <queue>
using namespace std;

const int MAXN = 1005, MAXM = 35;

struct Node{
	int tim, len;
	bool operator < (const Node& b) const {
		return tim > b.tim;
	}
}a[MAXM], b[MAXM];
int n, ma, mb, maxans;
int fa[MAXN], fb[MAXN];
priority_queue<Node> q;

int main() {
	scanf("%d%d%d", &n, &ma, &mb);
	for (int i = 1; i <= ma; ++i) {
		scanf("%d", &a[i].len);
		a[i].tim = a[i].len;
		q.push(a[i]);
	}
	for (int i = 1; i <= mb; ++i) {
		scanf("%d", &b[i].len);
		b[i].tim = b[i].len;
	}
	for (int i = 1; i <= n; ++i) {
		Node tmp = q.top();
		q.pop();
		fa[i] = tmp.tim;
		tmp.tim += tmp.len;
		q.push(tmp);
	}
	printf("%d ", fa[n]);
	while (q.size()) q.pop();
	for (int i = 1; i <= mb; ++i)
		q.push(b[i]);
	for (int i = n; i >= 1; --i) {
		Node tmp = q.top();
		q.pop();
		maxans = max(maxans, fb[i] = fa[i] + tmp.tim);
		tmp.tim += tmp.len;
		q.push(tmp);
	}
	printf("%d\n", maxans);
	return 0;
}

原文地址:https://www.cnblogs.com/xcysblog/p/9800815.html

时间: 2024-10-19 03:53:11

Luogu2751 [USACO Training4.2]工序安排Job Processing的相关文章

洛谷P2751 [USACO4.2]工序安排Job Processing

P2751 [USACO4.2]工序安排Job Processing 18通过 78提交 题目提供者该用户不存在 标签 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 一家工厂的流水线正在生产一种产品,这需要两种操作:操作A和操作B.每个操作只有一些机器能够完成. Ioi96d1.gif 上图显示了按照下述方式工作的流水线的组织形式.A型机器从输入库接受工件,对其施加操作A,得到的中间产品存放在缓冲库.B型机器从缓冲库接受中间产品,对其施加操作B,得到的最终产品存放在输

aps - (Advanced Planning And Scheduling)高级生产计划软件的架构和设计

aps - (Advanced Planning And Scheduling) 高级生产计划软件的架构和设计 3 主资源和副资源 主资源简单的说就是某道工序在什么机器或生产线上生产,一般来说,一台机器可以用于生产多个产品,但一个产品也可以在多个机器上生产,比如车间有自动化生产线,半自动化生产线,都可以用来生产某个产品 如果好几类机器都可以加工某道工序,这就涉及到多主资源的选择,一般的企业对多主资源的选择有自己的要求,比如尽量使用半自动机器,安排不下再使用自动机器或相反,或者不管安排到那类机器,

西二旗程序员家庭装修的架构之路 - 3(流程)

很多人存在一种误解,认为选择一个好的家装公司就会有一个满意的家装结果.实际上,这是不正确的. 满意的家装是由效果+质量两个方面决定的.根据我的实践总结:效果(家装风格)取决于业主自己和设计师,质量取决于工长和工人,家装公司仅仅起到一个托底的作用. 家装有点类似一件绘画作品的创建:绘画作品的美丑其实在业主和设计师的构想决定那一刻就固定下来了,画工的精细则依靠工长的工序安排和工人的施工手艺,家装公司则负责提供好的画笔,好的纸张和好的颜料. 但是,很多业主往往忽略了设计图的重要性,在前期沟通过程中,对

USACO:安排值班S2004Dec(贪心)

安排值班 题目大意:有n个奶牛,他们负责在长为t个时间点的时间内值班,每个时间点至少有一个在值班,每个奶牛有一段空闲时间可以值班,求满足要求所需最少奶牛数量,无法满足则输出-1. 分析: 将奶牛空闲时间段看成线段,按线段左端点进行排序,排序后从第一个线段开始,每次选择与前一个线段有重合或恰好相接的线段,并在满足此条件同时选择右端点最大的,让该奶牛值班.在选择时要避免选择线段右端点比前一个选择的线段右端点还小或相等的情况,注意处理好首尾线段即可. 代码: program cleaning; var

usaco Job Processing

A型机器从输入库接受工件,对其施加操作A,得到的中间产品存放在缓冲库.B型机器从缓冲库接受中间产品,对其施加操作B,得到的最终产品存放在输出库.所有的机器平行并且独立地工作,每个库的容量没有限制.每台机器的工作效率可能不同,一台机器完成一次操作需要一定的时间. 给出每台机器完成一次操作的时间,计算完成A操作的时间总和的最小值,和完成B操作的时间总和的最小值. /* ID: modengd1 PROG: job LANG: C++ */ #include <iostream> #include

牧场安排(usaco NOV06.cowfood)

ohn新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土地里种上美味的草,供他的奶牛们享用.遗憾的是,有些土地相当的贫瘠,不能用来放牧.并且,奶牛们喜欢独占一块草地的感觉,于是FJ不会选择两块相邻的土地,也就是说,没有哪两块草地有公共边.当然,FJ还没有决定在哪些土地上种草. 作为一个好奇的农场主,FJ想知道,如果不考虑草地的总块数,那么,一共有多少种种植方案可供他选择.当然,把新的牧场荒

【状压DP】BZOJ 1725 Usaco Corn Fields牧场的安排

题目和SCOI互不侵犯 很相似,感觉棋盘形的状压DP主要在于预处理状态.转移以及判断倒不是很难. #include <cstdio> #include <algorithm> const int State = (1<<12)+5; const int MOD = 100000000; int n,m,Count; int dp[20][State],Map[20]; int num[State],now[State]; bool Can[State][State];

186. [USACO Oct08] 牧场旅行

186. [USACO Oct08] 牧场旅行(点击转到COGS) 输入文件:pwalk.in   输出文件:pwalk.out 时间限制:1 s   内存限制:128 MB 描述 n个被自然地编号为1..n奶牛(1<=n<=1000)正在同样被方便的编号为1..n的n个牧场中吃草.更加自然而方便的是,第i个奶牛就在第i个牧场中吃草. 其中的一些对牧场被总共的n-1条双向通道的一条连接.奶牛可以通过通道.第i条通道连接的两个牧场是A_i和B_i(1<=A_i<=N;1<=B_

bzoj usaco 金组水题题解(1)

UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT.............. —————————————————————————————————————————————————————————————————————————————— 写(被虐)了整整一个月b站上usaco的金组题...然而到现在总共只写了100道上下TAT(当然是按AC人数降序排