#AEAI06008. 有限续航下的任务组合选择
有限续航下的任务组合选择
题目描述
机器人外出巡检前,调度器会收到一组候选小任务:有些任务收益高但耗时耗能,有些任务依赖前置任务,还有些任务风险过大不能选。你需要在时间和能量预算内选出一个任务集合。
任务编号为 1..n。每个任务有价值 value、优先级 priority、耗时 time、耗能 energy、风险 risk 和若干依赖任务。若选择某个任务,必须同时选择它依赖的所有任务;任一被选任务的风险都不能超过 risk_limit。正式枚举前,需要先判断依赖图是否存在环。
在所有合法且总价值大于 0 的非空集合中,选择排序键 (-总价值, -高优先级任务数, -(剩余能量), 任务编号序列, 总耗时, 总耗能) 最小的集合。其中高优先级任务指 priority >= high_thr,任务编号序列按升序输出。
输入格式
第一行输入 n t_budget e_budget。第二行输入 risk_limit high_thr。
接下来 n 行,第 i 行描述任务 i:
value priority time energy risk d dep1 dep2 ... depd
其中 d 为依赖数量,后面给出依赖任务编号。
输出格式
若依赖图有环,输出:
DEPENDENCY_CYCLE
若没有任何合法任务集合,输出:
NO_TASK_SELECTED
否则输出:
total_value count id1 id2 ... total_time total_energy
数据范围与测试提示
- 正式测试会覆盖样例没有出现的边界输入,请不要依赖样例规模或样例顺序写特判。
- 输出只包含题目要求的字段,不要输出调试信息;浮点结果按题面要求保留 6 位小数。
- 任务组合可能为空,也可能刚好用完续航或载荷容量;等号边界按题面可行性判断。
- 价值相同的组合要按任务数量、总代价和编号序列等规则稳定比较。
- 依赖输入为 1-based,任意依赖环先输出
DEPENDENCY_CYCLE;单个任务风险超限即过滤。
样例
输入样例 1
4 7 7
2 5
5 5 2 2 1 0
8 8 3 3 1 1 1
4 6 2 2 1 0
6 4 3 3 1 1 3
输出样例 1
17 3 1 2 3 7 7
输入样例 2
2 5 5
1 5
0 1 1 1 0 0
-1 9 1 1 0 0
输出样例 2
NO_TASK_SELECTED