POJ3614,P2887-Sunscreen(防晒霜)【贪心】

正题

POJ题目链接:http://poj.org/problem?id=3614
luogu评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P2887


题目大意

有n头牛,每个牛对阳光有上下限制的要求,有m种防晒霜,可以将牛的阳光固定在一个值,防晒霜有数量限制,求最多可以满足多少头牛。


解题思路

我们可以将对阳光的要求下限从大到小排序。然后对于每头牛,能满足的就满足,因为每头牛对于答案的贡献是一样的。之后我们按顺序对于每头牛就给他分配最大的防晒霜,因为这样对于后面的牛的影响是最小的。


code

#include
#include
using namespace std;
struct cow{
    int mif,maf;
}co[3501];
struct Spf{
    int spf,cs;
}sp[3501];
int n,m,s;
bool cmp1(cow x,cow y)
{
    return x.mif==y.mif?x.maf>y.maf:x.mif>y.mif;
}
bool cmp2(Spf x,Spf y)
{
    return x.spf>y.spf;
}
int main()
{
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++)
      scanf("%d%d",&co[i].mif,&co[i].maf);
    for (int i=1;i<=m;i++)
      scanf("%d%d",&sp[i].spf,&sp[i].cs);
    sort(co+1,co+1+n,cmp1);//排序
    sort(sp+1,sp+1+m,cmp2);
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)//寻找防晒霜
          if (sp[j].cs>0&&sp[j].spf<=co[i].maf&&sp[j].spf>=co[i].mif)
          {
            sp[j].cs--;
            s++;
            break;
          }
    }
    printf("%d",s);
}

你可能感兴趣的:(贪心)