正题
POJ题目链接:http://poj.org/problem?id=3614
luogu评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P2887
题目大意
有n头牛,每个牛对阳光有上下限制的要求,有m种防晒霜,可以将牛的阳光固定在一个值,防晒霜有数量限制,求最多可以满足多少头牛。
解题思路
我们可以将对阳光的要求下限从大到小排序。然后对于每头牛,能满足的就满足,因为每头牛对于答案的贡献是一样的。之后我们按顺序对于每头牛就给他分配最大的防晒霜,因为这样对于后面的牛的影响是最小的。
code
#include<cstdio>
#include<algorithm>
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);
}