Peter算法小课堂—区间模型

本文讨论了在信息学竞赛中遇到的区间问题,通过实例分析了一个关于美食摊位和课程的贪心算法,解释了如何避免“锁结构”反例,找到最多不重叠的区间划分。最后给出了一个课程区间最少分组的难题,强调了问题的复杂性和证明方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Peter Pan来啦……

最大不重叠区间数

二话不说,先来一道题

大家想想怎么贪心?我们可以将每一个美食摊位抽象成一个区间,区间左端点为开始排队时间,右端点为结束排队时间。其中,时间信息可以用数轴表示。

额……我们先给出一个错误的贪心

大家想想有没有反例?我将这种反例称之为“锁结构”,如下图

按照上面的贪心法,我们应该选粉色的时间段,但是呢?我们能找到更优的选法,即两端红色的时间段。那么,正确的贪心怎么做的呢?

我们来个证明:我们要最多的不重叠,我们就要腾出时间留给后面的任务,换句话说就要前面的任务早点结束,于是QED。大家尝试做一做。

#include <bits/stdc++.h>
using namespace std;
const int N=109;
int n,x,i,ans;
struct food{
	int s,t;
};
bool cmp(const food& a,const food& b){
	return a.t<b.t;
}
food d[N];
int main(){
	cin>>n;
	for(i=0;i<n;i++) cin>>d[i].s;
	for(i=0;i<n;i++) cin>>d[i].t;
	sort(d,d+n,cmp);
	x=-1;ans=0;
	for(i=0;i<n;i++)
		if(d[i].s>=x){
			ans++;
			x=d[i].t;
		}
	cout<<ans<<endl;
	return 0;
}

不重叠区间最少分组数

看着标题好像有点难懂,来道题吧

我们依然可以把每门课抽象成一个区间

这个贪心有点难,证明也很奇怪,所以,我打成图。

具体证明见后。

证明

浅谈信息学竞赛中的区间问题.docx-综合论文-在线文档投稿赚钱网 (book118.com)

结束啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值