Luogu3669牛牛配对

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu3669牛牛配对相关的知识,希望对你有一定的参考价值。

点此进入原题

算法:贪心

序:这题Luogu上题面是我翻译的QWQ(捂脸),不过错了一个地方:在输入格式那里应该是接下来有N行

题解

一题简单的贪心。

每次选产奶量最少的和产奶量最多的配对,取它们产奶时间的最大值就可以啦

代码

#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即可
}

 

以上是关于Luogu3669牛牛配对的主要内容,如果未能解决你的问题,请参考以下文章

noip2017普及 luogu3954 成绩

网络流24题Luogu P2756飞行员配对方案问题

luogu P2507 [SCOI2008]配对

第2题——DNA片段

luogu P2756 飞行员配对方案问题

luogu2756 飞行员配对方案问题