P1109 学生分组 贪心

Posted 幽殇默

tags:

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

在这里插入图片描述
https://www.luogu.com.cn/problem/P1109
我们首先要找到有多少人多余上限需要调走(用a表示)

所有缺少人数的组需要多少人来补(用b表示)

那么,最优的办法当然是让a去补b

因为不知道a,b谁更大

所以 max(a,b)就是最少的次数

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main(void)
{
    int n,l,r; cin>>n;
    int ans1=0,ans2=0;
    int sum=0;
    int a[55];
    for(int i=0;i<n;i++) cin>>a[i],sum+=a[i];
    cin>>l>>r;
    for(int i=0;i<n;i++)
    {
        if(a[i]>r) ans2+=a[i]-r;
        if(a[i]<l) ans1+=l-a[i];
    }
    if(sum<l*n) cout<<"-1";//人太少
    else if(sum>r*n) cout<<"-1";//人太多
    else cout<<max(ans1,ans2)<<endl;
    return 0;
}

以上是关于P1109 学生分组 贪心的主要内容,如果未能解决你的问题,请参考以下文章

acm未解之谜-洛谷P1109学生分组

贪心算法-- 纪念品分组

贪心算法之纪念品分组

贪心纪念品分组(P1094)

洛谷 P1094 纪念品分组贪心/双指针

NOIP-2007-普及组-纪念品分组-(贪心)