51nod 1191 消灭兔子 (贪心+优先队列)
2015-11-14 12:52
169 查看
有N只兔子,每只有一个血量B[i],需要用箭杀死免子。有M种不同类型的箭可以选择,每种箭对兔子的伤害值分别为D[i],价格为P[i](1 <= i <= M)。假设每种箭只能使用一次,每只免子也只能被射一次,计算要消灭地图上的所有兔子最少需要多少Q币。如不能杀死所有兔子,请输出No Solution。
特别说明:1、当箭的伤害值大于等于兔子的血量时,能将兔子杀死;2、血量B[i],箭的伤害值D[i],箭的价格P[i],均小于等于100000。
Input
Output
Input示例
Output示例
从每只兔子考虑(降序排列),用价值最小的箭射这只兔子。用价值最小的箭射这只兔子。
特别说明:1、当箭的伤害值大于等于兔子的血量时,能将兔子杀死;2、血量B[i],箭的伤害值D[i],箭的价格P[i],均小于等于100000。
Input
第1行:两个整数N,M,中间用空格分隔(1 <= N, M <= 50000),分别表示兔子的个数和箭的种类。 第2 - N + 1行:每行1个正整数(共N行),表示兔子的血量B[i](1 <= B[i] <= 100000)。 第N + 2 - N + M + 1行:每行2个正整数(共M行),中间用空格分隔,表示箭所能造成的伤害值D[i],和需要花费的Q币P[i](1 <= D[i], P[i] <= 100000)。
Output
输出最少需要多少Q币才能消灭所有的兔子。如果不能杀死所有兔子,请输出"No Solution"。
Input示例
3 3 1 2 3 2 1 3 2 4 3
Output示例
6
从每只兔子考虑(降序排列),用价值最小的箭射这只兔子。用价值最小的箭射这只兔子。
#include<iostream> #include<cstdio> #include<queue> #include<algorithm> using namespace std; const int maxn=50000+100; struct node { int d; int p; }a[maxn]; int b[maxn]; bool operator<(node x,node y) { return x.p>y.p; } bool cmp(node x,node y) { if(x.d>y.d) return true; return false; } priority_queue<node>qq; int main() { int n,m,ans; int i,j; ans=0; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) scanf("%d",&b[i]); sort(b+1,b+1+n,greater<int>()); for(i=1;i<=m;i++) scanf("%d%d",&a[i].d,&a[i].p); if(m<n) { printf("No Solution\n"); return 0; } sort(a+1,a+1+m,cmp); for(i=1,j=1;i<=n;i++) { for(;j<=m;j++) { if(a[j].d>=b[i]) qq.push(a[j]); else break; } if(!qq.empty()) { node t=qq.top(); ans+=t.p; qq.pop(); } else { printf("No Solution\n"); return 0; } } printf("%d\n",ans); return 0; }
相关文章推荐
- [2018]:母牛的故事(类递归)
- 数据库的小练习题目
- 括号表示法转孩子指针法
- mysql error 1064
- 用ffmpeg命令叠加图片水印
- iOS 开发App捕获异常, 反馈给服务器, 提高用户体验
- GIT
- android.os.NetworkOnMainThreadException
- 数据库的有关练习题目
- Web Sql database 本地数据库
- Hadoop学习日志- install hadoop
- 项目架构管理
- 图像处理中的数学原理详解13——内积空间
- 正则化
- 项目架构
- Greedy Gift Givers
- android三种布局优化的方法:include,merge,ViewStub
- SQL语言
- 逻辑回归
- Shell是什么?