高级农民
积分 2717
大米 颗
鳄梨 个
水井 尺
蓝莓 颗
萝卜 根
小米 粒
学分 个
注册时间 2017-6-18
最后登录 1970-1-1
本帖最后由 magicsets 于 2018-3-3 05:13 编辑
这道题目首先可以做个转换,将priority转为weight,只要保证如下性质:
(1) 相同priority有相同weight
(2) 高priority的weight大于所有比其低的priority的weight之和
然后求最大化weight总和的调度就可以了,算法参见这篇文章:
E. M. Arkin and E. B. Silverberg. 1987. Scheduling jobs with fixed start and end times. Discrete Appl. Math. 18, 1 (November 1987), 1-8.
https://ac.els-cdn.com/0166218X8 ... d9bfd070dc50e546bfe
时间复杂度O(n^2 log(n))
关于转换priority到weight,比如说楼主给的输入:"meeting 1" -- 100 (priority)
"meeting 2" -- 100
"meeting 3" -- 100
"meeting 4" -- 75
"meeting 5" -- 90 复制代码 那么一个可行转换如下:"meeting 1" -- 4 (weight)
"meeting 2" -- 4
"meeting 3" -- 4
"meeting 4" -- 1
"meeting 5" -- 2 复制代码 这样算法在最大化weight时,一定会优先高priority(因为所有低priority的weight加起来也没有一个高priority的weight大)