费用提前计算

这是一个经典思想。


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

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

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

[mit F[i] = minlimits_{0le j<i} lbrace F[j] + (sumC[i]-sumC[j]) * sumT[i] + S*(sumC[n]-sumC[j]) brace ]

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


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

原文地址:https://www.cnblogs.com/tztqwq/p/13907990.html