Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

费用提前计算

这是一个经典思想。


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

F[i,j]=min

采用费用提前计算的话, 就是设 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 @   xwmwr  阅读(284)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· ASP.NET Core - 日志记录系统(二)
阅读排行:
· 支付宝事故这事儿,凭什么又是程序员背锅?有没有可能是这样的...
· 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多
· C# 开发工具Visual Studio 介绍
· 在 Windows 10 上实现免密码 SSH 登录
· C#中如何使用异步编程
点击右上角即可分享
微信分享提示