智力大冲浪(洛谷P1230)
题目描述
小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元。先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则:
首先,比赛时间分为n个时段(n≤500),它又给出了很多小游戏,每个小游戏都必须在规定期限ti前完成(1≤ti≤n)。如果一个游戏没能在规定期限前完成,则要从奖励费m元中扣去一部分钱wi,wi为自然数,不同的游戏扣去的钱是不一样的。当然,每个游戏本身都很简单,保证每个参赛者都能在一个时段内完成,而且都必须从整时段开始。主持人只是想考考每个参赛者如何安排组织自己做游戏的顺序。作为参赛者,小伟很想赢得冠军,当然更想赢取最多的钱!注意:比赛绝对不会让参赛者赔钱!
输入输出格式
输入格式:
输入文件riddle.in,共4行。
第1行为m,表示一开始奖励给每位参赛者的钱;
第2行为n,表示有n个小游戏;
第3行有n个数,分别表示游戏1到n的规定完成期限;
第4行有n个数,分别表示游戏1到n不能在规定期限前完成的扣款数。
输出格式:
输出文件riddle.out,仅1行。表示小伟能赢取最多的钱。
输入输出样例
10000
7
4 2 4 3 1 4 6
70 60 50 40 30 20 10
9950
注:完成第一、二、三、四、六个任务得到最多钱。 这是一道贪心题,我们可以对于每个时段,保证扣得钱数最少。 对于样例,我们分别对游戏编号:
①. 4 70
②. 2 60
③. 4 50
④. 3 40
⑤. 1 30
⑥. 4 20
⑦. 6 10
其中第一列为编号,第二列为规定期限ti,第三列为未完成的赔钱。 显然,对于第一个时段,我们最优解是完成第五个游戏,这样赔钱数为0,已完成游戏⑤。
对于第二个时间段,我们最优解是完成第二个游戏,这样赔钱数还是为0,已完成游戏⑤②。
对于第三个时间段同理已完成⑤②④。
对于第四个时间段,游戏①我们肯定是要选的,因为它赔钱数最多,剩下的③⑥加起来会赔70元,但在这里,我们注意到,我们已完成的游戏里面⑤的赔钱数是30,但③的赔钱数是50,如果我们完成③放弃⑤,赔钱数只是50比之前优,而这个③我们就可以放在第一个时间段去完成
剩下的⑥所赔的钱都比已完成的少,就也放弃了。
第五个时间段,我们就只能完成⑦了。 在第四个时间段里,我们之所以能交换已完成的游戏和待完成的游戏是因为我们是根据规定期限从小到大排序的,这样后来完成的游戏肯定能在先前完成。
并且对于每个时段我们都保证了当前赔钱数最低,所以到了最后赔钱数也自然最低。 所以我们就把已完成的游戏的最小赔钱数和这个时段必须完成的最大赔钱数比较,如果小于则交换即可。
我们要用堆来维护已完成游戏的最小赔钱数,并对游戏按照期限进行排序。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
priority_queue<int> qwq; //已完成游戏的堆
int n,len;
long long m;
struct data{
int t,w; //t为期限,w为赔钱数
}game[];
bool comp(const struct data &a,const struct data &b){
if (a.t<b.t) return ;
if (a.t>b.t) return ;
if (a.t==b.t) return (a.w>b.w);
}
void work(int x){
qwq.push(-game[len].w); //负号即转化为小根堆
len++;
if (x<game[len].t) return; //这个游戏不是这个时段必须完成的话就退出
while (game[len].t==x){
int a=-qwq.top(); //开始比较已完成游戏最小赔钱数与要完成的游戏的赔钱数
if (a<game[len].w){
qwq.pop();
qwq.push(-game[len].w);
len++;
}
else {len++;return;}
}
return;
}
int main(){
cin>>m>>n;
long long all=;
for (int i=;i<=n;i++)
cin>>game[i].t;
for (int i=;i<=n;i++){
cin>>game[i].w;
all+=game[i].w;
}
len=;
sort(game+,game++n,comp);
for (int i=;i<=n;i++)
work(i);
long long ans=;
while (qwq.size()){
ans+=-qwq.top(); //ans为已完成的赔钱数
qwq.pop();
}
cout<<m-(all-ans)<<endl;
return ;
}
surf
智力大冲浪(洛谷P1230)的更多相关文章
- P1230 智力大冲浪 洛谷
https://www.luogu.org/problem/show?pid=1230 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每 ...
- 洛谷 P1230 智力大冲浪
洛谷 P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?! ...
- 洛谷 P1230 智力大冲浪 题解
P1230 智力大冲浪 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者 \(m\)元.先不要太高兴!因为这些钱还不一定都是你的 ...
- 洛谷P1230 智力大冲浪
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- P1230 智力大冲浪(洛谷)
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- C++ 洛谷P1230 智力大冲浪
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- 洛谷P1230智力大冲浪 题解
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- P1230 智力大冲浪
题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则: ...
- 智力大冲浪(riddle)
智力大冲浪(riddle) 题目描述 小伟报名参加中央电视台的智力大冲浪节目.本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元.先不要太高兴!因为这些钱还不一定都是你的?!接 ...
随机推荐
- MQTT---HiveMQ源代码具体解释(七)Netty-SSL/NoSSL
源博客地址:http://blog.csdn.net/pipinet123 MQTT交流群:221405150 实现功能 依据用户配置的不同的Listener(TcpListener.TlsTcpLi ...
- HTML-HTML5+CSS3权威指南阅读(三、CSS3)
不同的浏览器(包括-moz-代表的Mozilla Firefox, -ms-代表的Microsoft Internet Explorer等)厂商在发布正式版本之前之前, 试验各自对CSS3新特性的实现 ...
- 【Linux设备驱动程序】Chapter 1 - 概述
设备分类 字符设备.块设备.网络接口 字符设备 能够像字节流(类似文件)一样被访问的设备. 字符设备驱动程序通常至少要实现 open.close.read 和 write 系统调用. 举例:字符终端( ...
- mongodb - 集合重命名
#创建新的集合yb > for(i=0;i<10;i++){db.yb.insert({'i':i})} WriteResult({ "nInserted" : 1 } ...
- NoSQL(二)
redis介绍 1.aof存储的文件会越来越大,当文件很大时我们可以进行一次rdb存储原来的aof文件就可以删除了,因为aof就相当与mysql中的binlog文件会一致增长,当redis里面的key ...
- openfireserver和jdk环境删除命令
一.卸载jdk1.8 终端依次运行以下的命令 sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin sudo rm -rf / ...
- js 时间戳
https://www.cnblogs.com/crf-Aaron/archive/2017/11/16/7844462.html var time = '2018-03-22 00:00:00'.r ...
- 【转载】Oracle数据字典详解
转自:http://czmmiao.iteye.com/blog/1258462 Oracle数据字典概述 数据库是数据的集合,数据库维护和管理这用户的数据,那么这些用户数据表都存在哪里,用户的信息是 ...
- poj 1475 Pushing Boxes 推箱子(双bfs)
题目链接:http://poj.org/problem?id=1475 一组测试数据: 7 3 ### .T. .S. #B# ... ... ... 结果: //解题思路:先判断盒子的四周是不是有空 ...
- wordpress之备份与恢复数据
备份:mysqldump -u root -p wordpress > "d:/wordpress.sql" 恢复:mysql -u root -p < "c ...