UVALive 3507:Keep the Customer Satisfied(贪心 Grade C)
题意:
知道n(n <= 8e6)个工作的完成所需时间q和截止时间d,你一次只能做一个工作。问最多能做多少工作?
思路:
首先很像贪心。观察发现如下两个贪心性质:
1)一定存在一个最优方案,使得截止时间靠后的工作一定比截止时间靠前的工作迟完成(如果完成的话)
证明:
若工作i, j 有 d[i] > d[j]。假设我们现在有一个工作方案,使得i工作在j工作之前完成。
如 ..., i , ... , j , ...
记做 preI, i, midIJ, j, afterJ
此时将这个工作方案的i移动到j后面一个完成,其他不动。
则变成 preI , midIJ , j , i , afterJ
如此交换对 preI和afterJ 部分不会有影响。
对于midIJ部分,由于i的抽出,使得整体完成时间前移,所以不会导致结果更差。
对于j,原先在截止时间内,现在抽出了i,所以一定也在截止时间内。
对于i,因为d[i] > d[j],而现在i的完成时间等同于原先j的完成时间,所以i也一定能完成。
所以这个交换方案不会使得结果更差。
至于会不会变得更好,没有证明,感觉会吧~~迟一点的可以拖一下嘛。。。
2)若存在一种方案,使得 d[i] < d[j] 且 q[i] > q[j] 且选择了i而没有选择j, 则一定可以用j代替i。
证明:略。
所以采用如下贪心策略:
按d从小到大排序,然后依次放入。若放入后爆炸,则看一下前面最大的那个,如果最大的比这个大,踹走后,把这个放进去。
【注:本题证明不完备。可能有问题。如有发现,多谢指正】
坑点:忘记两组数据之间有空行。。。
代码:
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std; #define N 800100 struct Work{
int q, d;
void read() {
scanf("%d%d", &q, &d);
}
bool operator < (const Work &b) const {
if (d != b.d) return d < b.d;
return q < b.q;
}
}works[N]; priority_queue<int> que; int main() {
int t;
scanf("%d", &t);
int _ = ;
while (t--) {
!_++?:puts("");
int n;
scanf("%d", &n);
for (int i = ; i < n; i++) {
works[i].read();
} sort(works, works+n); while (!que.empty()) que.pop();
int now = ;
int cnt = ;
for (int i = ; i < n; i++) {
if (now + works[i].q <= works[i].d) {
now += works[i].q;
que.push(works[i].q);
cnt++;
} else {
if (!que.empty() && works[i].q < que.top()) {
now -= que.top();
now += works[i].q;
que.pop();
que.push(works[i].q);
}
}
}
printf("%d\n", cnt);
}
return ;
}
UVALive 3507:Keep the Customer Satisfied(贪心 Grade C)的更多相关文章
- UVALive - 3507 Keep the Customer Satisfied
题意:收到n个订单,每个订单有q,d分别代表做这个的时间,和最晚的完成时间,问你最多能接受几个订单 思路:贪心,我们显然要按最早的完成时间排序,那么接下来,我们用(6,8)和(4,9)做为例子,按照我 ...
- UVA1153-Keep the Customer Satisfied(贪心)
Problem UVA1153-Keep the Customer Satisfied Accept: 222 Submit: 1706Time Limit: 3000 mSec Problem D ...
- UVA - 1153 Keep the Customer Satisfied(贪心)
UVA - 1153 Keep the Customer Satisfied Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: ...
- poj 2786 - Keep the Customer Satisfied
Description Simon and Garfunkel Corporation (SG Corp.) is a large steel-making company with thousa ...
- UVA-1153 Keep the Customer Satisfied (贪心)
题目大意:有n件工作,做每件工作的消耗时间为s,截止时间为d,问最多能做完几件工作. 题目分析:贪心策略:优先做截止时间靠前的,一旦做不完当前工作,则从已经做过的工作中删去一件耗时最长的,用当前工作取 ...
- UVa 1153 Keep the Customer Satisfied (贪心+优先队列)
题意:给定 n 个工作,已知每个工作要用的时间 q 和 截止时间 d,问你最多完成多少个工作,每次最多能运行一个工作. 析:这个题是贪心,应该能看出来,关键是贪心策略是什么,这样想,先按截止时间排序, ...
- UVALive 3835:Highway(贪心 Grade D)
VJ题目链接 题意:平面上有n个点,在x轴上放一些点,使得平面上所有点都能找到某个x轴上的点,使得他们的距离小于d.求最少放几个点. 思路:以点为中心作半径为d的圆,交x轴为一个线段.问题转换成用最少 ...
- 【uva 1153】Keep the Customer Satisfied(算法效率--贪心+优先队列)
题意:有N个工作,已知每个工作需要的时间和截止时间.要求所有工作穿行完成,第一项任务开始的时间不早于时刻0.问最多能完成多少个工作.(N≤800000) 解法:贪心.可以模型化题目为:已知N个任务的长 ...
- UVa 1153 Keep the Customer Satisfied 【贪心 优先队列】
题意:给出n个工作,已知每个工作需要的时间last,以及截止时间end,(必须在截止时间之前完成)问最多能够完成多少个工作 首先预处理,将这n件任务按照截止时间从小到大排序 然后用一个cur记录当前做 ...
随机推荐
- Maven系列之快速入门
文章结构 唯快不破---Maven快速入门 稳打稳扎---Maven核心知识 实用为先---Maven如何建立Web项目 1 唯快不破---Maven快速入门 1.1 Maven项目 ...
- 十一、mysql老是停止运行该怎么解决
mysql老是停止运行该怎么解决 你可能还会遇到无法启动mysql的错误 解决方法如下:
- hover 改变另一个标签的属性
- Android 导出traces.txt 遇到的坑
我一直以为traces.txt 导出需要root .因为每当我 cd data ll 然后就会告诉我 Permission denied 后来我问同事,怎么导出traces.txt 文件.同事说很简单 ...
- Java中String类new创建和直接赋值字符串的区别
转自:https://blog.csdn.net/a986410589/article/details/52454492 方式一:String a = “aaa” ; 方式二:String b = n ...
- 《Cracking the Coding Interview》——第17章:普通题——题目1
2014-04-28 21:45 题目:就地交换两个数,不使用额外的变量. 解法:没说是整数,我姑且先当整数处理吧.就地交换可以用加法.乘法.异或完成,其中乘法和加法都存在溢出问题.三种方法都不能处理 ...
- 《数据结构》C++代码 线性表
线性表,分数组和链表两种(官方名称记得是叫顺序存储和链式存储).代码里天天用,简单写写. 首先是数组,分静态.动态两种,没什么可说的,注意动态的要手动释放内存就好了. 其次是链表,依旧分静态.动态.课 ...
- Percona-Tookit工具包之pt-summary
Preface As a dba,We are obliged to master several basic tools(such as vmstat,top,netstat,ios ...
- WebDriver--简单元素操作
clear():清除文本,可用来键盘输入前清除一些input输入框默认的值 send_key(*value):模拟按键输入 click():单击,不止按钮,也可以是文字/图片链接.复选框.单选框.下拉 ...
- [转载]Network-Emulator Network-Emulato
Network-Emulator-Toolkit网络模拟器使用详细介绍 by:授客 QQ:1033553122 原理介绍 图1 如上图,一个ADSL用户通过modem连接到网络,通过网络应用如IE,M ...