贪心+优先队列
来源:互联网 发布:深圳网络问政平台 编辑:程序博客网 时间:2024/06/06 18:28
Description
湫湫减肥
越减越肥!
最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏。
游戏规则很简单,用箭杀死免子即可。
箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买。
假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币。
越减越肥!
最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏。
游戏规则很简单,用箭杀死免子即可。
箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买。
假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币。
Input
输入数据有多组,每组数据有四行;
第一行有两个整数N,M(1 <= N, M <= 100000),分别表示兔子的个数和箭的种类;
第二行有N个正整数,分别表示兔子的血量Bi(1 <= i <= N);
第三行有M个正整数,表示每把箭所能造成的伤害值Di(1 <= i <= M);
第四行有M个正整数,表示每把箭需要花费的QQ币Pi(1 <= i <= M)。
特别说明:
1、当箭的伤害值大于等于兔子的血量时,就能将兔子杀死;
2、血量Bi,箭的伤害值Di,箭的价格Pi,均小于等于100000。
第一行有两个整数N,M(1 <= N, M <= 100000),分别表示兔子的个数和箭的种类;
第二行有N个正整数,分别表示兔子的血量Bi(1 <= i <= N);
第三行有M个正整数,表示每把箭所能造成的伤害值Di(1 <= i <= M);
第四行有M个正整数,表示每把箭需要花费的QQ币Pi(1 <= i <= M)。
特别说明:
1、当箭的伤害值大于等于兔子的血量时,就能将兔子杀死;
2、血量Bi,箭的伤害值Di,箭的价格Pi,均小于等于100000。
Output
如果不能杀死所有兔子,请输出”No”,否则,请输出最少的QQ币数,每组输出一行。
Sample Input
3 31 2 32 3 41 2 33 41 2 31 2 3 41 2 3 1
Sample Output
#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>#include <queue>using namespace std;int ra[100005];struct node{int w; //伤害值 int q; // Q币价值 friend bool operator<(node a,node b){return a.q>b.q; //优先队列,花费最小的在对头 }}all[100005];bool cmp(int a,int b) {return a>b;}bool cmp1(node a,node b){return a.w>b.w;}int main(){int n,m,i,j;while(~scanf("%d %d",&n,&m)){for(i=0;i<n;i++)scanf("%d",&ra[i]);for(i=0;i<m;i++)scanf("%d",&all[i].w);for(i=0;i<m;i++)scanf("%d",&all[i].q);sort(ra,ra+n,cmp); //兔子排序 sort(all,all+m,cmp1); //按照箭的伤害由大到小排序 j=0;long long sum=0;int flag=1;priority_queue<node> pq; //创建优先队列 for(i=0;i<n;i++){ while(all[j].w>=ra[i]&&j<m)//*如果该箭能杀死兔子,入队 pq.push(all[j++]);if(pq.empty()) //如果队列为空,无法杀死当前兔子 {flag=0;break;}sum+=pq.top().q; //总Q币 pq.pop(); // 弹出该箭 }if(flag==0)printf("No\n");else printf("%lld\n",sum);}return 0; }
priority_queue<int,vector<int>,greater<int> > q; //从小到大排序
priority_queue<int,vector<int>,less<int> > q; //从大到小排序
0 0
- poj3614-贪心、优先队列
- EOJ1855 贪心+优先队列
- uvalive4254(贪心+优先队列)
- HOJ1062 贪心+优先队列
- poj3465 贪心+优先队列
- 贪心+优先队列
- 贪心+优先队列
- POJ2010 贪心优先队列
- 贪心+优先队列
- POJ3614Sunscreen(优先队列+贪心)
- 优先队列贪心
- HDU6047优先队列+贪心
- POJ2431 优先队列+贪心
- 贪心加优先队列
- poj1042(贪心+优先队列)
- uva10954Add All(贪心+优先队列)
- hdu2850Load Balancing 贪心+优先队列
- poj3190Stall Reservations(贪心+优先队列)
- 浅谈zip格式处理逻辑漏洞
- 四种类型的引用
- Android Studio 程序暂停一段时间 与 新建一个子线程
- 静态导入:
- “支持向量机系列”的番外篇一: Duality
- 贪心+优先队列
- Java值传递和引用传递
- cocos2d 动画
- C++易混点——深度解析指针悬挂和虚析构函数
- [DllImport("User32")],[DllImport("user32.dll", EntryPoint = "mouse_event")]
- Sping Data Redis 使用事务时,不关闭连接的问题
- Java IO操作——JAVA输入数据操作实例
- Android中的设计模式
- 深深地掉入一个叫做同源跨域的大坑,到现在还没有走出来