我试图使用动态编程解决这个问题,但我无法确定如何定义子问题及其之间的关系。
所以它与常规活动选择问题基本相同,只是你有两种类型的活动(让他们称之为黄色和灰色),所以每个活动都有一个开始时间结束时间和颜色。 黄色活动的优先级高于灰色活动,因此如果黄色活动与2个灰色活动重叠,则黄色活动将进入解决方案并且灰色活动不会被激活。
感谢。
答案 0 :(得分:0)
将它们拆分为2个集合,尝试从Grays中选择2,从黄色中选择1,就像使用常规选择问题一样,比较 - >获得新的时间戳 - >删除无效活动(来自两个集合)
A = { }, Selection
loop {
G1 = Select(1 from Gray)
Y1 = Select(1 from Yellow)
if (Y1.finish < G1.finish) {
Selection = Y1;
}
else {
G2 = Select(2 from Gray)
if (Y1.finish < G2.finish)
Selection = Y1;
else
Selection = {G1, G2}
}
A = A U Selection;
LowerBound = Selection.Last.Finish;
RemoveFrom(Yellow : have starting time < LowerBound)
RemoveFrom(Gray : have starting time < LowerBound)
}
注意:
Select(2...)
并不意味着选择前两个
收集,但前2个可行的活动