Codevs No.1052 地鼠游戏

本文介绍了一个名为“地鼠游戏”的CodevsNo.1245竞赛题目的解决方案。该问题涉及到一系列具有不同出现时间和得分的地鼠,目标是在每秒击打一个地鼠的前提下获得最高总分。文章详细解释了如何通过贪心算法结合最大堆的数据结构来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2016-05-31 18:22:32

题目链接: 地鼠游戏 Codevs No.1245

题目大意:

  打地鼠,一开始所有地鼠都出现,但是维持的时间(s)和击中所得的积分各不同,求出采用最优策略(1s打一个)打地鼠所得

解法:

  贪心+堆优化

  按时间倒着选,每次将当前时间结束的地鼠加入集合

  每秒在最大堆中取最上端的点加入答案即可

需要注意的地方:

  1.时间顺序一定要对,正着选是错的

 1 //地鼠游戏 (Codevs No.1052)
 2 //贪心
 3 #include<stdio.h>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 const int maxn=110;
 8 struct node
 9 {
10     int key;
11     int time;
12 };
13 node F[maxn];
14 bool comp(node a,node b)
15 {
16     return a.time>b.time;
17 }
18 priority_queue <int> q;
19 int ans;
20 int N;
21 int main()
22 {
23     scanf("%d",&N);
24     for(int i=1;i<=N;i++)scanf("%d",&F[i].time);
25     for(int i=1;i<=N;i++)scanf("%d",&F[i].key);
26     sort(F+1,F+N+1,comp);
27     int now=F[1].time;
28     int loc=1;
29     while(now)
30     {
31         while(F[loc].time==now)
32         {
33             q.push(F[loc].key);
34             loc++;
35         }
36         if(!q.empty())
37         {
38             ans+=q.top();
39             q.pop();
40         }
41         now--;
42     }
43     printf("%d",ans);
44     return 0;
45 }

 

转载于:https://www.cnblogs.com/Neptune-/p/5546931.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值