洛谷P1248 加工生产调度 贪心
正解:贪心
解题报告:
$umm$直接看可能比较难想,可以先考虑另一个题?
有$n$个小怪,每打一只小怪会扣$a_i$的血,打完之后会回升$b_i$的血,问至少要多少血量才能使全程血量大于等于零?
$umm$这是个入门贪心题趴?就先把所有$b_i-a_i>0$的拿出来,然后按照$a_i$从小到大排序.然后对于$b_i-a_i<0$的,可以先反序看,就当作是从结尾走到那个转折点,就变成先扣$b_i$的血再回升$a_i$的血,所以就按$b_i$从小到大排序(反序从小到大,正序是从大到小嗷$QwQ$.然后答案就过程中扣得最多的那个节点的扣血量嘛$QwQ$
好然后再来看这题$QwQ$
发现其实这题和上一题的模型挺像的.
先考虑怎么求答案趴?发现答案就$\sum b$+浪费时间.所以现在就是要最小化浪费时间
浪费时间是什么呢?其实就类似于上一题那样儿的,每个任务会耗费$a_i$的时间,完成之后可以减少$b_i$的浪费,然后现在问浪费时间最少是多少?如果再上一题一点也可以说是,至少要预设多少浪费时间才能使全程不用浪费更多的时间?
所以就和上题一样地做就成,$over$
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rb register bool
#define rc register char
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define lb(x) lower_bound(st+1,st+st_cnt+1,x)-st const int N=+;
int n,gd_cnt,gs_cnt,ret,as,a[N],b[N];
struct node{int a,b,id;}gd[N],gs[N]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il bool cmp(node x,node y){return x.a<y.a;}
il bool cmq(node x,node y){return x.b>y.b;} int main()
{
//freopen("1248.in","r",stdin);freopen("1248.out","w",stdout);
n=read();rp(i,,n)a[i]=read();rp(i,,n)b[i]=read();
rp(i,,n){if(a[i]<b[i])gd[++gd_cnt]=(node){a[i],b[i],i};else gs[++gs_cnt]=(node){a[i],b[i],i};}
sort(gd+,gd++gd_cnt,cmp);sort(gs+,gs++gs_cnt,cmq);
rp(i,,gd_cnt){ret-=gd[i].a;if(-ret>as)as=-ret;ret+=gd[i].b;}
rp(i,,gs_cnt){ret-=gs[i].a;if(-ret>as)as=-ret;ret+=gs[i].b;}
rp(i,,gd_cnt)as+=gd[i].b;rp(i,,gs_cnt)as+=gs[i].b;printf("%d\n",as);
rp(i,,gd_cnt)printf("%d ",gd[i].id);rp(i,,gs_cnt)printf("%d ",gs[i].id);
return ;
}
洛谷P1248 加工生产调度 贪心的更多相关文章
- 洛谷P1248 加工生产调度
流水作业调度问题 有\(N\)个作业要在两台机器\(M_1\)和\(M_2\)组成的流水线上完成加工.每个作业\(i\)都必须先花时间\(a_i\)在\(M_1\)上加工,然后花时间\(b_i\)在\ ...
- 【题解/模板】P1248 加工生产调度(贪心)
[题解/模板]P1248 加工生产调度(贪心) 分析: \(A\)流水线的时间是确定的,所以现在就是要让\(b\)的时间尽量短 \(tB > tA\),除非所有东西都不需要\(b\).(t指结束 ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
- codevs 3008 加工生产调度[贪心]
3008 加工生产调度 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 某工厂收到了n个产品的订 ...
- 洛谷 P5663 加工零件
题目传送门 解题思路: 最暴力的做法: bfs模拟,每次将一个阶段的所有点拿出来,将其所有直连的点都放进队列,知道本阶段结束,最后看1号点会不会在最后一个阶段被放入队列.(洛谷数据40分) 优化了一下 ...
- 【洛谷P1248】加工生产调度
题目大意:某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工.某个产品i在A.B两车间加工的时间分别为Ai.Bi.怎样安排这n个产品的加工顺序, ...
- 洛谷P4064 [JXOI2017]加法(贪心 差分)
题意 题目链接 Sol 这题就是一个很显然的贪心... 首先二分一个答案,然后check是否可行.check的时候我们需要对每个位置\(i\),维护出所有左端点在\(i\)左侧,右端点在\(i\)右侧 ...
- 洛谷P4064 加法 [JXOI2017] 贪心
正解:贪心 解题报告: 传送门! 首先最小值最大显然考虑二分?然后就二分一个值mid,从左往右考虑,对于小于等于mid的点显然可以求出这个点至少要加几次,然后找到覆盖这个点的右端点max的区间区间加上 ...
- 洛谷P1966 火柴排队 贪心+离散化+逆序对(待补充QAQ
正解: 贪心+离散化+逆序对 解题报告: 链接在这儿呢quq 这题其实主要难在想方法吧我觉得?学长提点了下说用贪心之后就大概明白了,感觉没有很难 但是离散化这里还是挺有趣的,因为并不是能很熟练地掌握离 ...
随机推荐
- Part17—触摸屏显身手—Part17.1—原理简介
- Xib设计UITableViewCell然后动态加载
转自: http://www.2cto.com/kf/201202/120764.html (注:环境Mac OS X Lion 10.7.3 + Xcode 4.2.1 + iOS SDK 5.0. ...
- 根据User Agent参数的各个字段Mozilla/5.0/4.0-AppleWebKit/Chrome/Safari/Firefox/Opera/MSIE来确定/判断客户端使用什么浏览器
下面给你一一解答以及给你介绍: //Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/533.21.1 (KHTML, like ...
- KMPnext数组运用、最小循环节问题
http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html http://www.cnblogs.com/wuyiqi/archive/ ...
- HDU 2191多重背包问题、
#include<cstdio> #include<cmath> #include<iostream> #include<cstring> +; int ...
- Reasoning and Learing学习笔记
Assignment 1 question 1 1.clisp安装及运行->参考博客 2.参数为列表,参考PPT 3.把嵌套列表变成非嵌套->题目P07 代码
- ImportError: DLL load failed: 找不到指定的模块。 TensorFlow 1.13
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhenlingcn/article/details/88647288问题描述 问题环境TensorF ...
- H3C PPP会话建立过程
- Python--day41--thread1.join()
在 Python 的多线程编程中,在实例代码中经常有 thread1.join()这样的代码.那么今天咱们用实际代码来解释一下 join 函数的作用. join的原理就是依次检验线程池中的线程是否结束 ...
- 模板——伸展树 splay 实现快速分裂合并的序列
伸展操作:将treap中特定的结点旋转到根 //将序列中从左数第k个元素伸展到根,注意结点键值保存的是原序列id void splay(Node* &o, int k) { ] == NULL ...