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记录当前做 ...
随机推荐
- TouTiao开源项目 分析笔记20 问答详情
1.效果预览 1.1.效果预览,从问答列表开始 前面实现了从列表到内容. 这里主要讲解从内容到详情. 点击每一个回答内容,进入回答详情页面. 1.2.触发的点击事件 在WendaContentView ...
- 通过Aspose.Word和ZXING生成复杂的WORD表格
1.前言 这是我之前做的一个项目中要求的功能模块,它的需求是生成一个WORD文档,需要每页一个表格并且表格中需要插入文字.条形码和二维码等信息,页数可控制.具体的效果如下图所示: 可以看到有以下几点是 ...
- Spring---单例模式(Singleton)的6种实现
1.1.1 摘要 在我们日常的工作中经常需要在应用程序中保持一个唯一的实例,如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就 ...
- 在ddms 里面查看data/data里面的东西 不显示data/data
今天我要查看data/anr/tarces.txt,没办法,我只有root手机. 可是root之后,我发现还是不能查看或者导出traces.txt. 后来我才知道,root之后,文件夹权限没有变,所以 ...
- shell脚本递归删除空文件夹
有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的脚本,于是自己动手写了一个 脚本 #!/bin/bash # author: 十年后的卢哥哥(http://www.cnblogs.com/ ...
- Canvas 剪切图片
/** * 剪切图像 */ function initDemo8(){ var canvas = document.getElementById("demo8"); if (!ca ...
- 课时6:Python之常用操作符
目录: 一.算术操作符 二.优先级问题 三.比较操作符 四.逻辑操作符 五.课时06课后习题及答案 ****************** 一.算术操作符 ****************** > ...
- 课时17:函数:Python的乐高积木
目录: 一.创建和调用函数 二.函数的参数 三.函数的返回值 四.课时17课后习题及答案 为了使得程序得代码变得简单,就需要把程序分解成较小得组成部分.有三种方法可以实现:函数.对象.模块. **** ...
- JavaWeb笔记(五)JSP
JSP 指令 格式: <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %> 分类: page 配置JSP页面 contentType:等同于response.setCon ...
- 团队Alpha版本(七)冲刺
目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...