//区间调度问题:结束时间越早之后可选的工作也就越多。
//证明:
/*
与其他选择方案相比,该算法的选择方案在选取了相同数量的更早数量的更早开始工作时,
其最终结束时间不会比其他方案的更晚
*/
#include <iostream>
#include <algorithm>
using namespace std;
#define MAXN 100000
int N,S[MAXN],T[MAXN];
pair<int ,int> itv[MAXN];
int main()
{
//pair的sort是按pair的first从小到大排序
//为了让结束时间早的工作排在前面,把T存入first,把S存入second
int i;
for(i=0;i<N;i++)
{
itv[i].first = E[i]; //E是终止时间
itv[i].second =S[i]; //S是开始时间
}
sort(itv,itv+N);
int ans=0,t=0;
//t是最后所选工作的结束时间
for(i=0;i<N;i++) //这里直接枚举所有的second就行,包括自己,这样写方便,反正是取<,自己也没有什么关系
{
if(t<itv[i].second) //如果一个end小于一个start,则记一次数
{ //并把start设为新的end
ans++;
t=itv[i].first;
}
}
printf("%d\n",ans);
return 0;
}
贪心区间问题 (白皮书例题2)
猜你喜欢
转载自blog.csdn.net/xigongdali/article/details/81433647
今日推荐
周排行