防晒
1. 防晒
给定若干个线段和若干个点 让每个点属于一个线段的匹配数目最大
贪心策略
按照左端点降序排序,每次选取能够用的中间最大的
如果是按照左端点升序排列,那么可能会出现下面线段包住上面线段的情况
我们要求的策略是: 对于当前线段内的每一个点 要么只有当前线段能用 要么两个都可以用
bool cmp1(Node x,Node y){return x.l>y.l;}
bool cmp2(SPF x,SPF y){return x.spf>y.spf;}
int n,m;
int main()
{
n=read(); m=read();
for(rint i=1;i<=n;i++) p[i].l=read(),p[i].r=read();
sort(p+1,p+n+1,cmp1);
for(rint i=1;i<=m;i++) q[i].spf=read(),q[i].num=read();
sort(q+1,q+m+1,cmp2);
int ans=0;
for(rint i=1;i<=n;i++)
{
for(rint j=1;j<=m;j++)
if(q[j].num&&q[j].spf>=p[i].l&&q[j].spf<=p[i].r)
{
q[j].num--;
ans++;
break;
}
}
cout<<ans<<endl;
}
贪心原理: 范围放缩:局部最优策略不会让整体结果变差