费用提前计算
这是一个经典思想。
例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 修缮长城。
这道题比较简单就不说了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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#中如何使用异步编程