【IOI 2002/FJOI2019】任务安排(超级计算机)

【IOI 2002/FJOI2019】任务安排(超级计算机)

题目

\(N\) 个任务排成一个序列在一台机器上等待完成(顺序不得改变),这 \(N\) 个任务被分成若干批,每批包含相邻的若干任务。从时刻 \(0\) 开始,这些任务被分批加工,第 \(i\) 个任务单独完成所需的时间是 \(T_i\)。在每批任务开始前,机器需要启动时间 \(S\),而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成)。每个任务的费用是它的完成时刻乘以一个费用系数 \(F_i\)。请确定一个分组方案,使得总费用最小。

分析

可以使用费用提前计算的技巧,把后面的费用移到前面计算。

\(d_i\) 代表到前 \(i\) 个任务的最小代价:\(F,T\) 分别为 \(f,t\) 数组的前缀和
\[ \begin{align*} d_i & = \min_{j=0}^{i-1} \{d_j + S(F_n - T_j) + T_i (F_i - F_j)\} \\ & = \min_{j=0}^{i-1} \{d_j + S F_n - S T_j + T_i F_i - T_i F_j\} \\ & = \min_{j=0}^{i-1} \{d_j - S T_j - T_i F_j\} + T_i F_i + S F_n \\ \end{align*} \]
令:\(b = d_j - ST_j - T_iF_j\), 则有:
\[ \begin{align*} b & = d_j - ST_j - T_iF_j\\ d_j - ST_j & = b + T_iF_j \\ \end{align*} \]
\(y=d_j-ST_j\), \(x=T_j\), \(k = T_i\), 这就是我们常见的斜率优化式。

显然 \(T_i\) 单调递增。

猜你喜欢

转载自www.cnblogs.com/zhylj/p/10747351.html
今日推荐