code1052 地鼠游戏
贪心算法,从后往前
来自codevs的题解:
我的纠结思考过程:
如果每一秒都没有重复的地鼠出现 那么肯定是一个一个挨着打
如果有重复的地鼠 那么要考虑打那个更优 当然是选分值最大的
单纯这样想很合理 但是忽略了一种情况 分值小的地鼠早出现了 而后面重复的地鼠都比这个早出现的地鼠分值大
我们就不能去打这只小的 而是把时间去用在打后面重复的地鼠身上
如 1 2 2
5 6 7
那么按照地鼠的分值排序 然后挨着打怎么样
也不对 因为分值大的地鼠也有可能停留时间长 我们早打了他 会导致时间短的地鼠没法打 而时间还空着无视可做
如 2 1
9 5
后来看了题解才明白
把上述两种错误的思想结合起来就是把正解
我们倒着枚举时间打地鼠 这样就避免了第二种情况的错误
然后再从所有地鼠中选出能打的分值最大的 这样就避免了第一种情况的错误
设立一个大顶堆,堆中的元素是当前时间下能打的地鼠的分值
把地鼠们按照消失的时间由大到小排序,循环时间temp=最后消失的地鼠的消失时间 to 1
把所有消失时间等于temp的地鼠放入堆(表示可以打它们了)
然后取出最大的(堆顶)打掉,累加得分即可
代码如下:
#include<iostream>
#include<algorithm>
#include<queue>
#define Size 105
using namespace std; int n;
struct Mouse{
int t,w;
}mouse[Size];
priority_queue<int> q; bool cnt(Mouse m1,Mouse m2){return m1.t>m2.t;} int main(){
cin>>n;
for(int i=;i<=n;i++){
cin>>mouse[i].t;
}
for(int i=;i<=n;i++){
cin>>mouse[i].w;
} sort(mouse+,mouse+n+,cnt); int ans=;
for(int temp=mouse[].t,k=;temp>;temp--){
while(mouse[k].t==temp){
q.push(mouse[k].w);
k++;
}
if(!q.empty()){
ans+=q.top();
q.pop();
}
} cout<<ans<<endl; return ;
}
code1052 地鼠游戏的更多相关文章
- AC日记——地鼠游戏 codevs 1052
1052 地鼠游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 王钢是一名学习成绩优异的学生,在平 ...
- codevs 1052 地鼠游戏
1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
- 贪心法 codevs 1052 地鼠游戏
1052 地鼠游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 王钢是一名学习成绩优异的学生,在平 ...
- Codevs No.1052 地鼠游戏
2016-05-31 18:22:32 题目链接: 地鼠游戏 Codevs No.1245 题目大意: 打地鼠,一开始所有地鼠都出现,但是维持的时间(s)和击中所得的积分各不同,求出采用最优策略(1s ...
- codevs 1052 地鼠游戏 优先队列
1052 地鼠游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1052/ Descriptio ...
- codevs1052 地鼠游戏
1052 地鼠游戏 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不但学习刻苦,而且善于经常总结.完善自己的学习方法,所以他总能在 ...
- codevs地鼠游戏(贪心)
1052 地鼠游戏 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他 ...
- CODEVS——T1052 地鼠游戏
http://codevs.cn/problem/1052/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 D ...
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十):创建游戏逻辑
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
随机推荐
- C++11标准库中cstdio头文件新增的5个格式化I/O函数学习
刚开始学网络编程,稍微扩展书上的简单C/S程序时,发现以前太忽略标准I/O这一块,查官网发现C++11新增了几个格式化I/O函数. snprintf 将格式化输出写入到有大小限制的缓存中 vfs ...
- 使用FileZilla连接Linux
FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP ...
- (转)Inno Setup入门(十三)——Pascal脚本(2)
本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250933 事件函数(2) function CheckPassw ...
- (转)Inno Setup入门(三)——指定压缩方式
本文转载自:http://blog.csdn.net/augusdi/article/details/8564796 Setup段中的compression指定了采用的压缩方式,较高的压缩率需要较多的 ...
- Cassandra 的启动和初始化
Cassandra常用命令 Cassandra启动过程详解[原创] Cassandra 的入口 CassandraDaemon 作为Cassandra的入口,做了以下几件事: load configu ...
- 1094 The Largest Generation
题意:略. 思路:层序遍历:在结点中增加一个数据域表示结点所在的层次. 代码: #include <cstdio> #include <queue> #include < ...
- 后台给GridView绑定数据时给每一行添加一个JS方法
--------JS function ReturnDictionaryValues(srcElement) { top.document.getElementById("_DialogFr ...
- python学习笔记(十二):发送邮件
我们在开发程序的时候,有时候需要开发一些自动化的任务,执行完之后,将结果自动的发送一份邮件,python发送邮件使用smtplib模块,是一个标准包,直接import导入使用即可,代码如下: impo ...
- VMware虚拟机如何设置从U盘启动
要给虚拟机重新安装win7系统,想使用U盘重装系统的方式,就需要让虚拟机从U盘启动,以下内容就是虚拟机从U盘启动的全操作过程. 前期准备: 1.u盘启动盘 2.VMware虚拟机 具体操作步骤: 1. ...
- MySQL多实例介绍
我们前面已经做了MySQL数据库的介绍以及为什么选择MySQL数据库,最后介绍了MySQL数据库在Linux系统下的多种安装方式,以及讲解了MySQL的二进制方式单实例安装.基础优化等,下面给大家讲解 ...