CSU 1089 羊吃草
来源:互联网 发布:国际提单查询网站知乎 编辑:程序博客网 时间:2024/04/28 03:03
很不错的优先队列题。
有N只羊,他们要吃草料,商店有M种草料,每种草料只能给一只羊吃。草料有价格price和质量score两种特性,每只羊对两种特性都有最低要求。
要求在满足质量,每只羊都能吃到的前提下,求出最小总价;
有N只羊,他们要吃草料,商店有M种草料,每种草料只能给一只羊吃。草料有价格price和质量score两种特性,每只羊对两种特性都有最低要求。
要求在满足质量,每只羊都能吃到的前提下,求出最小总价;
思路:先把草料和羊按质量从大到小排序,遍历羊,将大于羊要求的质量(即符合要求的草料入队),在队列中按价格从小到大排列,然后找到价格恰满足此羊的草料,出队,加入总价。
//Memory: 4228 KB//Time: 992 MS#include<iostream>#include<algorithm>#include<stdio.h>#include<set>using namespace std;#define N 100100struct mess{ int p; int s;};mess m1[N],m2[N];bool cmp(const mess & m1,const mess & m2){ return m1.s>m2.s;}bool operator <(const mess & m1,const mess & m2){ return m1.p<m2.p;}int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i,j; multiset<mess> sm; //memset(m2,0,sizeof(m2)); for(i=0;i<n;i++) scanf("%d%d",&m1[i].p,&m1[i].s); for(i=0;i<m;i++) scanf("%d%d",&m2[i].p,&m2[i].s); sort(m1,m1+n,cmp); sort(m2,m2+m,cmp); long long cost=0; j=0; int flag=0; for(i=0;i<n;i++) { while(1) { if(m2[j].s>=m1[i].s) sm.insert(m2[j]); //加入优先队列 else break; j++; } if(!sm.empty()) { multiset<mess>::iterator pos; pos=sm.lower_bound(m1[i]); //找到满足要求的草料if(pos!=sm.end()){cost+=pos->p;sm.erase(pos);}else{flag=1;break;} }else{flag=1;break;} } if(flag) printf("-1\n"); else printf("%lld\n",cost); } return 0;}
- CSU 1089 羊吃草
- 羊羊吃草
- [JZOJ5427]吃草
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- CSU
- 测试驱动开发
- 关于如何在Myeclipse中安装插件
- Java线程:新特征-原子量
- x86系统C语言函数调用时的内存分布
- POJ 1067 取石子游戏
- CSU 1089 羊吃草
- Java线程:新特征-障碍器
- apache 文件读写
- 运放稳定性连载7:环路稳定性主要技巧与经验(1)
- next_permutation & prev_permutation & hdu 1027 Ignatius and the Princess II
- 我的作品总结
- Delegate 与 Event
- 思维惯性引发的编程问题
- HDU 动态规划(46道题目)倾情奉献