[bzoj 2726] 任务安排 (斜率优化 线性dp)
3月14日第三题!!!(虽然是15号发的qwq)
Description
机器上有N个需要处理的任务,它们构成了一个序列。这些任务被标号为1到N,因此序列的排列为1,2,3…N。这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和。注意,同一批任务将在同一时刻完成。每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。
Input
第一行两个整数,N,S。
接下来N行每行两个整数,Ti,Fi。
Output
一个整数,为所求的答案。
Sample Input
5 1
1 3
3 2
4 3
2 3
1 4
Sample Output
153
HINT
Source
补:范围:
1<=N<=3*10^5,0<=s,ci<=512,-512<=ti<=512.
数据较小版本(n^2即可)请点这:http://blog.csdn.net/ye_xingyu/article/details/79562237
斜率优化,斜率为(s+sumT[i]),当截距最小时的f[i]就是当前最优决策
注意:ti有负数,则sumT[i]不具有单调性要把队列中全部存着(队尾仍可去掉无用决策即不满足下凸性)用二分每次找到左侧斜率小于当前斜率右侧大于的位置,直接用方程转移(即不用min)
code:
//By Menteur_Hxy
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;const int MAX=300010;
const int INF=0x3f3f3f3f;
int n,s,l,r;
long long ti[MAX],fi[MAX],f[MAX],q[MAX];
//注意开long long 前缀和还是很大的,我因为这个wa两次QAQint search(int k) {if(l==r) return q[l];int L=l,R=r;while(L<R) {int mid=(L+R)>>1;if(f[q[mid+1]]-f[q[mid]]<=k*(fi[q[mid+1]]-fi[q[mid]])) L=mid+1;else R=mid;}return q[L];
}int main() {scanf("%d %d",&n,&s);for(int i=1;i<=n;i++) {scanf("%lld %lld",&ti[i],&fi[i]);ti[i]+=ti[i-1];fi[i]+=fi[i-1];}r=l=1;for(int i=1;i<=n;i++) {int p=search(s+ti[i]);f[i]=f[p]-(s+ti[i])*fi[p]+ti[i]*fi[i]+s*fi[n];while(l<r && (f[q[r]]-f[q[r-1]])*(fi[i]-fi[q[r]])>=(f[i]-f[q[r]])*(fi[q[r]]-fi[q[r-1]])) r--;q[++r]=i;}printf("%lld",f[n]);return 0;
}
通过这个题重新复(zi)习(xue)了下斜率优化感觉斜率优化就是来一个维护比值单调的队列(这个值就对应线性规划的坐标系中的斜率)从中选出最优决策。(不过感觉弄方程变形又弄变量有点麻烦233~)
期待之后有关斜率优化的继续学习与练习( ̄▽ ̄)/。
转载于:https://www.cnblogs.com/Menteur-Hxy/p/9248003.html
[bzoj 2726] 任务安排 (斜率优化 线性dp)相关推荐
- BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]
4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...
- BZOJ 2149 拆迁队 斜率优化DP 主席树
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2149 题目大意: 一个长度为 n n的序列aa,改变其中的某些数使之成为一个单调递增序列, ...
- luogu P5468 [NOI2019]回家路线 (斜率优化、DP)
题目链接: (luogu) https://www.luogu.org/problemnew/show/P5468 题解: 爆long long毁一生 我太菜了,这题这么简单考场上居然没想到正解-- ...
- bzoj 2149 拆迁队 斜率优化+cdq分治
题面 题目传送门 解法 从来没写过这样的-- 第一问非常简单,能够从 j j j转移到 i i i的条件显然为 a [ i ] − a [ j ] ≥ i − j a[i]-a[j]≥i-j a[i] ...
- [bzoj] 1597 土地购买 || 斜率优化dp
原题 农夫John准备扩大他的农场,他正在考虑N块长方形的土地. 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. FJ ...
- 【日常学习】【二分】【单调队列优化线性DP】codevs3342 绿色通道题解
题目描述 Description <思远高考绿色通道>(Green Passage, GP)是唐山一中常用的练习册之一,其题量之大深受lsz等许多oiers的痛恨,其中又以数学绿色通道为最 ...
- 『摆渡车 斜率优化dp及总结』
摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...
- 动态规划(斜率优化):BZOJ 3675 [Apio2014]序列分割
Description 小H最近迷上了一个分割序列的游戏.在这个游戏里,小H需要将一个长度为N的非负整数序列分割成k+l个非空的子序列.为了得到k+l个子序列, 小H将重复进行七次以下的步骤: 1.小 ...
- YBTOJ洛谷P3195:玩具装箱(斜率优化dp)
传送门 文章目录 前言 解析 代码 前言 斜率优化dp,就是利用斜率优化的dp (逃) 解析 第一道斜优的题 分析题目 设sumisum_isumi为1-i的c的前缀和 容易写出dp转移式: dpi ...
最新文章
- Java数组常用操作,创建,比较,排序,检索,打印数组;copyOf,equals,sort,toString
- 框架应用 : Spring - 开发详述
- fftw库 vs2019_FFTW库在VS 2010中的使用方法
- 元件库导入_Axure RP9【元件库的学习】
- 设置DIV半透明CSS代码:
- git(10)---GIT对象模型
- 百度echarts极速入门
- CLR_via_C#.3rd 翻译[25.8 使用线程的理由]
- Web Server的启动过程
- 软件测试项目实战学习路线
- 【前端面试之缓存】js本地缓存、浏览器缓存、服务器缓存
- Python进行拉勾网数据爬取框架与思路
- Q4财报再次显示,百度在2B市场的竞争中已占据领先地位
- 电商平台后台管理系统--->操作方法说明
- Swift实战之2048小游戏
- 一位程序员搬家到新加坡的体验
- TJCTF之Bricked Binary
- MySql学习笔记(2)--数据库操作及数据管理
- 非安装tomcat,服务安装_离水的鱼_新浪博客
- Android最新手机号正则判断(含最新166/198/199开头的手机号)
热门文章
- kafka数据 落盘_Kafka数据可靠性保证三板斧-ACK/ISR/HW
- java中重新加载指定文件_java-更改后重新加载属性文件
- 华为服务器系统蓝屏,服务器主机蓝屏
- php原生sql语法,thinkphp执行原生SQL语句的实现方法
- java getrealpath_JavaEE路径陷阱之getRealPath
- vb.net mysql存储图片_怎么让VB.NET 上传图片到SQL 数据库只保存路径,图片保存到文件...
- LeetCode 112. 路径总和 、113. 路径总和 II 思考分析
- 剑指 Offer 57 - II. 和为s的连续正数序列 思考分析
- scala 访问修饰符_Scala中的访问修饰符
- java vector_Java Vector size()方法与示例