问题阐述
给定若干个工作的开始时间、结束时间和权重(可以理解成重要程度),求出能完成的最大的工作权重(尽可能地完成更重要的工作),当然必须满足各个工作相容。如以下三个工作:
开始时间 结束时间 权重
工作1 0 3 4
工作2 5 6 5
工作3 2 8 10
由不带权重的区间调度方法,依次结束时间最早且相容的工作,这里就选出{1, 2},能实现的最大权重是4+5=9。而显而易见,选择{3}权重可达到10,因此最早结束时间的贪心策略在带权重的区间调度问题里已不适用。
分析
各工作开始与结束时间
给出上图所示8个工作的开始结束时间,按结束时间升序排序(区间调度问题一般都会先按结束时间升序排序)。 数据说明如下:
工作数目n
声明结构体数组存储工作的开始、结束时间和权值
struct JOB{
int s, e, v;
JOB(int s=0, int e=0, int v=0):s(s), e(e), v(v){}
}job[maxn];
dp[n],dp[i]表示对前1个工作考虑结束后所能达到的最大权值
frt[n],frt[i]表示序列中前一与之相容的最大工作