bzoj 2726 任务安排 斜率优化DP】的更多相关文章

这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y)  然后给你一个k, 要求你维护出这个z最小是多少. 那么对于给定的点来说 我们可以维护出一个下凸壳,因为如果存在一个上突壳的话,那么上突壳的点是一定不会被选上的. 所以对于解来说,只有下凸壳的点再会被选到. 所以我们就可以用单调队列维护处这个下凸壳. 假如我们保证给定的k是单调递增的, 那么我们就可以把前面一段不需要的东西给删掉. 假如k不是单调的,则我们就可以用二分找到第一个 >  询问k的答案.…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4709 课上讲的题,还是参考了博客...:https://www.cnblogs.com/GXZlegend/p/8615607.html 这道题和之前写的斜率优化不同的一点是用单调栈维护上凸壳,而且需要二分查找答案: 为什么感觉每次写出来的斜率优化DP都不一样...还是没有理解透彻... 代码如下: #include<iostream> #include<cstdio> #i…
虽然以前学过斜率优化dp但是忘得和没学过一样了.就当是重新学了. 题意很简单(反人类),利用费用提前的思想,考虑这一次决策对当前以及对未来的贡献,设 \(f_i\) 为做完前 \(i\) 个任务的贡献,\(t_i\) 为时间前缀和, \(c_i\) 为费用前缀和,容易得到 \[f_i = Min_{0 \leq j < i} (f_j + t_i (c_i - c_j) + s (c_n - c_j)\] 直接暴力转移,时间复杂度 \(O(n^2)\) 考虑斜率优化,将转移关系变形为 \[f_j…
2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 868  Solved: 236[Submit][Status][Discuss] Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti.在每批任务开始前,机器需要启…
4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[i]-s[k])^2 \}\) 发现可以斜率优化,很久没写忘记了60分暴力走人 拆开平方,\(f[i][p]=-2s_i s_k + f[k][p-1] + s_k^2 - s_i^2\) 对于两个转移\(j,k\),j比k优时\[ slope(j,k)=\frac{f[j]+s_j^2-f[k]-…
如果有一块土地的长和宽都小于另一块土地的长和宽,显然这块土地属于“赠送土地”. 我们可以排序一下将这些赠送土地全部忽略掉,一定不会影响到答案. 那么剩下的土地就是长递减,宽递增的.令dp[i]表示购买前i个土地的最小代价. 显然有dp[i]=min(dp[j]+ku[i]*ch[j+1]).(j<i). 其中ku[i]表示第i个土地的宽,ch[i]表示第i个土地的长. 这个式子得用斜率优化一下.很normal,推出式子就解决了. # include <cstdio> # include…
题面 BZOJ传送门(中文题面但是权限题) HDU传送门(英文题面) 分析 定义f[i]f[i]f[i]表示在iii时间(离散化之后)卖出手上的机器的最大收益.转移方程式比较好写f[i]=max{f[j]−p[j]+r[j]+(d[i]−d[j]−1)∗g[j]}f[i]=max\{f[j]-p[j]+r[j]+(d[i]-d[j]-1)*g[j]\}f[i]=max{f[j]−p[j]+r[j]+(d[i]−d[j]−1)∗g[j]} 显然可以斜率优化,移项之后得到(f[j]−p[j]+r[j…
Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了得到k+1个子序列,小H需要重复k次以下的步骤: 1.小H首先选择一个长度超过1的序列(一开始小H只有一个长度为n的序列--也就是一开始得到的整个序列): 2.选择一个位置,并通过这个位置将这个序列分割成连续的两个非空的新序列.   每次进行上述步骤之后,小H将会得到一定的分数.这个分数为两个新序列中元素和的乘积.小H希望选择一种最佳的分割方式,使得k轮之后…
题解 转移方程与我的上一篇题解一样 : $S\times sumC_j  + F_j = sumT_i \times sumC_j + F_i - S \times sumC_N$. 分离成:$S\times sumC_j  + F_j = sumT_i \times sumC_j + F_i - S \times sumC_N$ 不同的是, 时间可能为 负数(出题人解释:不要把时间看的这么狭义. 所以$sumT_i$不是递增. 所以我们不能在队首弹出斜率比 $sumT_i$小的数, 只能用一个…
题意 给$n$个贝壳,可以将贝壳分成若干段,每段选取一个贝壳$s_i$,这一段$s_i$的数目为$num$,可以得到$num^2\times s_i$个柠檬,求最多能得到几个柠檬 可以发现只有在一段中首尾颜色相同的情况下最优,所以每次选取一段里末位的$s_i$变成柠檬,于是有$f_i=max_{j \le i}{f_{j-1}+s_i\times(pre_i-pre_j+1)^2}$ ,$pre_i$表示前$i$个贝壳里$s_i$出现了几次 令$j<k$,假设$f_{j-1}+s_i\times…