防晒

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;
}

贪心原理: 范围放缩:局部最优策略不会让整体结果变差

posted @ 2021-12-30 16:31  __iostream  阅读(34)  评论(0)    收藏  举报