贪心算法,从后往前

来自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 地鼠游戏的更多相关文章

  1. AC日记——地鼠游戏 codevs 1052

    1052 地鼠游戏  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 王钢是一名学习成绩优异的学生,在平 ...

  2. codevs 1052 地鼠游戏

    1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...

  3. 贪心法 codevs 1052 地鼠游戏

    1052 地鼠游戏  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 王钢是一名学习成绩优异的学生,在平 ...

  4. Codevs No.1052 地鼠游戏

    2016-05-31 18:22:32 题目链接: 地鼠游戏 Codevs No.1245 题目大意: 打地鼠,一开始所有地鼠都出现,但是维持的时间(s)和击中所得的积分各不同,求出采用最优策略(1s ...

  5. codevs 1052 地鼠游戏 优先队列

    1052 地鼠游戏 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1052/ Descriptio ...

  6. codevs1052 地鼠游戏

    1052 地鼠游戏 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不但学习刻苦,而且善于经常总结.完善自己的学习方法,所以他总能在 ...

  7. codevs地鼠游戏(贪心)

    1052 地鼠游戏  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond   题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他 ...

  8. CODEVS——T1052 地鼠游戏

     http://codevs.cn/problem/1052/  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 D ...

  9. Cocos2D iOS之旅:如何写一个敲地鼠游戏(十):创建游戏逻辑

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

随机推荐

  1. 打包python文件,让文件程序化

    通过对源文件打包,Python程序可以在没有安装 Python的环境中运行,也可以作为一个独立文件方便传递和管理. 现在网上主流的打包方式有两种py2exe或者pyinstaller两款多平台的Pyt ...

  2. codechef January Lunchtime 2017简要题解

    题目地址https://www.codechef.com/LTIME44 Nothing in Common 签到题,随便写个求暴力交集就行了 Sealing up 完全背包算出得到长度≥x的最小花费 ...

  3. 北京师范大学第十六届程序设计竞赛决赛 F 汤圆防漏理论

    链接:https://www.nowcoder.com/acm/contest/117/F来源:牛客网 汤圆防漏理论 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...

  4. 20181105_线程之Task

    Task是基于.net Framework3.0框架, Task使用的线程也是来自于ThreadPool 多线程的两个意义: 优化体验(常见于不卡界面), 提升运行速度(不同线程可以分担运算任务) 总 ...

  5. 第六章 通过Service访问Pod(下)

    6.4 外网如何访问service (1)ClusterIp: Service通过Cluster内部的IP对外提供服务,只有Cluster内的节点和Pod可以访问,这是默认的Service类型. (2 ...

  6. 【BZOJ】1911: [Apio2010]特别行动队(斜率优化dp)

    题目 传送门:QWQ 分析 用$ dp[i] $ 表示前 i 个人组成的战斗力之和 然后显然$ dp[i]=Max (  dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum ...

  7. window.location和window.open的区别

    window.location = "http://www.baidu.com" 跳转后有后退功能 window.location.replace("http://www ...

  8. springcloud(二) eureka的使用

    上一节讲到order微服务是通过rest调用user微服务的地址.但是,user微服务的地址是写死的, 如果user微服务集群的话,那么order微服务该如何调用呢?这个时候注册中心该上场了 演示eu ...

  9. Python基础学习九 单元测试

    import unittest import HTMLTestRunner #产生测试报告 from BeautifulReport import BeautifulReport def calc(x ...

  10. postgresql 相关

    http://www.yiibai.com/html/postgresql/2013/080998.html 1.安装PG的client以及函数库: yum install postgresql    ...