HDU-4544 湫湫系列故事——消灭兔子 (贪心+优先队列)
2024-10-21 09:34:59
题目思路
将兔子的血量从大到小排列,将箭的属性写在类中(结构体也成),排序按照伤害从大到小排列,若有相等的则按价格从小到大排。
代码
#include<bits/stdc++.h>
using namespace std;
int N, M;
const int maxn = 100000+10;
int b[maxn], d[maxn], p[maxn];
class Arrow
{
public:
int D, P;
Arrow(int i, int j):D(i), P(j){}
Arrow(){}
}a[maxn];
bool cmp(Arrow s1, Arrow s2)
{
if(s1.D == s2.D)
return s1.P < s2.P;
return s1.D > s2.D;
}
int main()
{
std::ios::sync_with_stdio(false);
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
while(cin >> N >> M)
{
memset(b, 0, sizeof(b));
memset(d, 0, sizeof(d));
memset(p, 0, sizeof(p));
for(int i = 0; i < N; i++)
cin >> b[i];
for(int i = 0; i < M; i++)
{
cin >> d[i];
a[i].D = d[i];
}
for(int i = 0; i < M; i++)
{
cin >> p[i];
a[i].P = p[i];
}
sort(b, b + N, greater<int>());
sort(a, a + M, cmp);
priority_queue<int, vector<int>, greater<int> > q;
long long ans = 0;
int k = 0, flag = 0;
for(int i = 0; i < N; i++)
{
while(k < M && b[i] <= a[k].D)
{
q.push(a[k].P);
k++;
}
if(q.empty())
{
flag = 1;
break;
}
ans += q.top(); //加上杀死该兔子对应的最佳方案
q.pop();
}
if(flag)
cout << "No" << endl;
else
cout << ans << endl;
}
}
最新文章
- 局域网象棋游戏(C++实现,使用Socket,界面使用Win32,CodeBlocks+GCC编译)
- YARN基本框架介绍
- DSP using MATLAB示例Example3.16
- JetBrains WebStorm 7.0 Build 131.202 Win/Mac/Liniux
- 在client类中设置访问属性 address,business和individua
- Activator.CreateInstance 方法 (Type) 的用法
- Javascript之简单按钮搜索功能
- Subsets II ——LeetCode
- C#委托的简单剖析
- HDU2066:一个人的旅行(Dijkstra)
- STM32学习笔记(一)——点亮一个LED
- GitHub 入门不完全指南(未完待续)
- Spark性能调优之Shuffle调优
- myeclipse 彻底让烦人的各种验证消失 让你的开发速度飞快
- EF中关于TransactionScope的使用
- 数据交换格式与SpringIOC底层实现
- 一次电话Java面试的问题总结(JDK8新特性、哈希冲突、HashMap原理、线程安全、Linux查询命令、Hadoop节点)
- [luogu5003]跳舞的线【动态规划】
- linux 硬链接 软链接
- 你确定你真的懂Nginx与PHP的交互?