P3669 [USACO17OPEN]Paired Up S

https://www.luogu.com.cn/problem/P3669
涉及知识点:贪心
橙色题
 
思路:
每次选产奶量最少的和产奶量最多的配对,取它们产奶时间的最大值
代码:
复制代码
#include<cstdio> #include<algorithm> using namespace std; const int N=100005; struct Node { int x, y; }a[N]; bool cmp(Node s, Node t) //按照产奶量从大到小排序 { return s.y<t.y; } int n,ans; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a+1,a+1+n,cmp); int i=1,j=n; //头尾指针分别指向产奶量最少的和产奶量最多的 while(i<=j) { if(a[i].y+a[j].y>ans) ans=a[i].y+a[j].y; //产奶时间当前最长,更新答案ans if(a[i].x>a[j].x) //产奶少的奶牛数量大于产奶多的 { a[i].x-=a[j].x; //产奶少的奶牛数量减去与产奶多的奶牛配对的数量 j--; //修改尾指针 } //下面同上不解释 else if(a[i].x<a[j].x) { a[j].x-=a[i].x; i++; } else //产奶一样多,同时修改头尾指针 { i++; j--; } } printf("%d",ans); //最后输出ans即可 }
复制代码

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16485268.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示