费用提前计算

这是一个经典思想。


例1: CH5A01 任务安排1。 在 acwing 上的题号是 300。
sumT、sumC 分别为 T、C 的前缀和, 设 F[i,j] 表示前 i 个任务分 j 批执行的最小费用。
则转移方程为:

\[\mit F[i,j] = \min\limits_{0\le k<i} \lbrace F[k,j-1] + (sumC[i]-sumC[k]) * (j*S+sumT[i]) \rbrace \]

采用费用提前计算的话, 就是设 F[i] 表示前 i 个任务分了若干批执行的最小费用。
则转移方程为:

\[\mit F[i] = \min\limits_{0\le j<i} \lbrace F[j] + (sumC[i]-sumC[j]) * sumT[i] + S*(sumC[n]-sumC[j]) \rbrace \]

看起来很科幻, 《进阶指南》给出的解释足够详细, 再此简述:
考虑由 j 开头 i 结尾的一批启动, 这个 S 最终造成的贡献是固定的, 即 S * (sumC[N]-sumC[j]), 所以每次转移的时候把这次启动的贡献加上, 就可以不用记录批次了。
还有一点要说明:这个题目使用费用提前计算并不会导致决策错误, 证明比较简单。


例2: UVA1336 修缮长城。
这道题比较简单就不说了。

posted @ 2020-10-31 22:07  xwmwr  阅读(274)  评论(1编辑  收藏  举报