首页 > 其他分享 >斜率优化dp

斜率优化dp

时间:2023-10-01 11:23:01浏览次数:56  
标签:前缀 枚举 贡献 斜率 任务 时间 优化 dp

斜率优化dp


【模板】任务安排

机器上有 n 个需要处理的任务,它们构成了一个序列。这些任务被标号为 1 到 n,因此序列的排列为 1 , 2 , 3 .... n。这 n 个任务被分成若干批,每批包含相邻的若干任务。从时刻 0 开始,这些任务被分批加工,第 i 个任务单独完成所需的时间是 T_i。在每批任务开始前,机器需要启动时间 s,而完成这批任务所需的时间是各个任务需要时间的总和。

同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数 C_i。

请确定一个分组方案,使得总费用最小。

先设计 \(dp\) 状态,显然可以 \(dp_{i,j}\) 表示把前 \(i\) 个任务分配进前 \(j\) 组里,令 \(t_i\) 表示时间的前缀和数组,\(c_i\) 表示贡献的前缀和数组,转移的时候枚举第 \(j-1\) 个区间的终点 \(k\),\(dp_{i,j}=\min({dp_{k,j-1}+(j*s+t_i)*(c_i-c_k)})\) ,其中 \(j*s\) 表示前 \(j\) 个区间中重新启动产生的总贡献,\(t_i\) 即为花费的时间,\(c_i-c_k\) 为价值和。

\(O(n^3)\) 时间空间全寄,考虑优化。发现如果想把 \(j\) 这一维缩掉,转移方程中唯一与他有关的就是重新启动的贡献 \(s*j\)。那么我们可以换一种统计方式,不在枚举每个 \(i\) 时统计前面所有段对当前段的的贡献,我们直接在统计当前段(新开段)的时候提前把他对后面产生的贡献加上,这样与一开始的转移方程是等价的。

这种思想是一种名为费用提前计算的经典思想。

新开的转移方程为 \(dp_i\) 表示前 \(i\) 个任务最小贡献,前缀和意义不变,依然枚举上一个区间的终点 \(k\),\(dp_i=\min (p_j+(c_n-c_k)*s+t_i*(c_i-c_k))\),其中 \((c_n-c_k)*s\) 表示分段后他对于后面每一段都贡献了一个 \(s\)。

现在时间是 \(O(n^2)\) 的了,可以通过弱化版

考虑怎么在缩减时间复杂度,

标签:前缀,枚举,贡献,斜率,任务,时间,优化,dp
From: https://www.cnblogs.com/02Ljh/p/17738668.html

相关文章

  • 搜索优化
    一、什么是剪枝     首先应当明确的是,“剪枝”的含义是什么。我们知道,搜索的进程可以看作是从树根出发,遍历一棵倒置的树——搜索树的过程。而所谓剪枝,顾名思义,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。我们在编写搜......
  • wordpress搭建-AlmaLinux
    yuminstall-ywget&&wget-Oinstall.shhttp://download.bt.cn/install/install_6.0.sh&&shinstall.sh==================================================================Congratulations!Installedsuccessfully!========================面板账......
  • 理解React页面渲染原理,如何优化React性能?
    ReactJSX转换成真实DOM过程当使用React编写应用程序时,可以使用JSX语法来描述用户界面的结构。JSX是一种类似于HTML的语法,但实际上它是一种JavaScript的扩展,用于定义React元素。React元素描述了我们想要在界面上看到的内容和结构。在运行React应用程序时,JSX会被转换成真实的DOM元素......
  • 笔记:VMware之性能优化
    目标:通过调整VMware设置,提高VMware中虚拟机性能版本:16.2.2build-19200509一、首选项针对所有虚拟机设置,对所有虚拟机都有效1.1设置路径:主页->编辑->首选项->更新软件更新,取消“启动时检查产品更新”,取消“根据需要检查软件组件”1.2设置路径:主页->编辑->首选项->反馈客......
  • 【题解】CF1110D Jongmah(DP)
    【题解】CF1110DJongmah代码很短,但是思路我怎么也想不到的神仙DP。题意概述你在玩一个叫做Jongmah的游戏,你手上有\(n\)个麻将,每个麻将上有一个在\(1\)到\(m\)范围内的整数\(a_i\)。为了赢得游戏,你需要将这些麻将排列成一些三元组,每个三元组中的元素是相同的或者连......
  • 多重背包单调队列优化
    引用自:动态规划-背包问题(01背包、完全背包、多重背包)#include<cstdio>#include<algorithm>#include<cstring>usingnamespacestd;constintmaxn=100005;intn,m,cnt;intv[102],num[102],dp[maxn];structQueue{intpos,val;}q[maxn];intmain(){......
  • Go每日一库之178:chromedp(一个基于Chrome DevTools协议的库,支持数据采集、截取网页长
    该库提供了一种简单、高效、可靠的方式来控制Chrome浏览器进行自动化测试和爬取数据。项目地址:https://github.com/chromedp/chromedp它可以模拟用户在浏览器中执行各种操作,如点击、输入文本、截取网页长图、将网页内容转换成pdf文档、下载图片等,从而获取到需要采集的数据。基......
  • openGauss学习笔记-84 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT部署服
    openGauss学习笔记-84openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT部署服务器优化:x86通常情况下,数据库由以下组件绑定:CPU:更快的CPU可以加速任何CPU绑定的数据库。磁盘:高速SSD/NVME可加速任何I/O绑定数据库。网络:更快的网络可以加速任何SQL*Net绑定数据库。除以......
  • 数位dp学习笔记
    数位dp学习笔记目录数位dp学习笔记数位dp定义:题型特征:dp设计:dp转移例题:BZOJ3679数位dp定义:...好像就是对数位进行dp,统计方案数。题型特征:通常会有10组左右的询问,每一次询问你较大(1e18左右)的区间内满足某个条件的数的数量。dp设计:dp一般会有2到4维。通常情况下,第一维i表......
  • Python笔记:基本数据结构(容器)的优化
    列表的性能问题队列的弹出问题利用Python的原生语法很难写出一个真正完全能达到\(O(1)\)的队列,究其原因是由于insert方法的时间复杂度问题:classqueue: def__init__(self,q): self.q=[] defpopright(self): self.q.pop() defappendleft(self,elem): self.q.ins......