洛谷 3093 奶牛调度
来源:互联网 发布:软件开发工具是什么 编辑:程序博客网 时间:2024/05/11 03:58
go to the problem
%% loi_black.
做法一 (我的)
对于奶牛的截止时间从小到大排序,记当前的最大答案为ans,累积的挤奶牛的总时间为sum。则对于当前奶牛,能挤就挤,不然就比较当前奶牛和之前挤过的奶牛的最小挤奶量,如果大于,就放弃那个,选择当前这个。不然就不做处理。
#include<iostream> #include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<queue>using namespace std;int N,ans=0,sum=0;struct maple{ int g,d;}cow[10010];bool cmp(maple a,maple b){ return a.d<b.d;}priority_queue<int,vector<int>,greater<int> > q;int main(){ scanf("%d",&N); for(int i=1;i<=N;++i) scanf("%d%d",&cow[i].g,&cow[i].d); sort(cow+1,cow+N+1,cmp); for(int i=1;i<=N;++i) { if(sum<cow[i].d) { ++sum; ans+=cow[i].g; q.push(cow[i].g); } else if(!q.empty()) if(q.top()<cow[i].g) { ans-=q.top(); q.pop(); ans+=cow[i].g; q.push(cow[i].g); } } printf("%d",ans); return 0;}
做法二(loi_black的)
发现如果我尽可能的用最大的挤奶量的奶牛把当前时间都排满的话答案一定是更优的。
那么我就从最大的截止时间开始往前枚举(–i)
对于每个时刻都把截止时间为当前时刻的奶牛都放堆里,
然后就是每个时刻能挤就挤,只挤当前堆里挤奶量最大的奶牛 。
既然是把时间从后往前找,就可以保证所挤的每个奶牛都是合法的。
详见black博客qwq。
PS:非常感谢black学长的耐心讲解。
阅读全文
0 0
- 洛谷 3093 奶牛调度
- 奶牛抗议 洛谷p2344
- 洛谷P2340 奶牛会展
- 洛谷【p2619】奶牛工资
- 奶牛
- 【洛谷 1345】 奶牛的电信
- 洛谷 P2619 奶牛工资 贪心
- 洛谷 P1843 奶牛晒衣服
- 洛谷 [P1578] WC2002 奶牛浴场
- 洛谷1843 奶牛晒衣服【解法一】
- 洛谷1843 奶牛晒衣服【解法二】
- 洛谷 P1472 奶牛家谱 Cow Pedigrees
- 洛谷 P2986 [USACO10MAR]伟大的奶牛聚集
- 洛谷 P1472 奶牛家谱 Cow Pedigrees
- 【DP】洛谷 P1472 奶牛家谱 Cow Pedigrees
- 洛谷 P1345 奶牛的电信Telecowmunication
- 动态规划 洛谷P1868 饥饿的奶牛
- 【洛谷2986】【USACO10MAR】伟大的奶牛聚集
- 记慕课软工的学习成果
- Java eclipse中,汉字都是倒了的,怎么解决?
- Python写一个简单的FTP
- c++逆波兰式计算表达式
- B. Nikita and string
- 洛谷 3093 奶牛调度
- maven管理的jsp-web应用如何添加servlet、jsp相关依赖(org.apache.jasper.JasperException: java.lang.ClassNotFoundExcep
- 爬虫知识点(session)
- 欢迎使用CSDN-markdown编辑器
- 【java并发】CountDownLatch
- 习题6.3
- 使用无线数传 radio telemetry 连接pixhawk进入offboard模式进行mavlink协议通讯的尝试
- 深入理解mysql
- 洛谷3366 最小生成树模板题