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)相关推荐

  1. BZOJ 4518: [Sdoi2016]征途 [斜率优化DP]

    4518: [Sdoi2016]征途 题意:\(n\le 3000\)个数分成m组,一组的和为一个数,求最小方差\(*m^2\) DP方程随便写\(f[i][j]=min\{f[k][j-1]+(s[ ...

  2. BZOJ 2149 拆迁队 斜率优化DP 主席树

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2149 题目大意: 一个长度为 n n的序列aa,改变其中的某些数使之成为一个单调递增序列, ...

  3. luogu P5468 [NOI2019]回家路线 (斜率优化、DP)

    题目链接: (luogu) https://www.luogu.org/problemnew/show/P5468 题解: 爆long long毁一生 我太菜了,这题这么简单考场上居然没想到正解-- ...

  4. bzoj 2149 拆迁队 斜率优化+cdq分治

    题面 题目传送门 解法 从来没写过这样的-- 第一问非常简单,能够从 j j j转移到 i i i的条件显然为 a [ i ] − a [ j ] ≥ i − j a[i]-a[j]≥i-j a[i] ...

  5. [bzoj] 1597 土地购买 || 斜率优化dp

    原题 农夫John准备扩大他的农场,他正在考虑N块长方形的土地. 每块土地的价格是它的面积,但FJ可以同时购买多快土地. 这些土地的价格是它们最大的长乘以它们最大的宽, 但是土地的长宽不能交换. FJ ...

  6. 【日常学习】【二分】【单调队列优化线性DP】codevs3342 绿色通道题解

    题目描述 Description <思远高考绿色通道>(Green Passage, GP)是唐山一中常用的练习册之一,其题量之大深受lsz等许多oiers的痛恨,其中又以数学绿色通道为最 ...

  7. 『摆渡车 斜率优化dp及总结』

    摆渡车的题解我已经写过一遍了,在这里,这次主要从斜率优化的角度讲一下摆渡车,并总结一下斜率优化会出现的一些奇奇怪怪的错误. 摆渡车 Description 有 n 名同学要乘坐摆渡车从人大附中前往人民 ...

  8. 动态规划(斜率优化):BZOJ 3675 [Apio2014]序列分割

    Description 小H最近迷上了一个分割序列的游戏.在这个游戏里,小H需要将一个长度为N的非负整数序列分割成k+l个非空的子序列.为了得到k+l个子序列, 小H将重复进行七次以下的步骤: 1.小 ...

  9. YBTOJ洛谷P3195:玩具装箱(斜率优化dp)

    传送门 文章目录 前言 解析 代码 前言 斜率优化dp,就是利用斜率优化的dp (逃) 解析 第一道斜优的题 分析题目 设sumisum_isumi​为1-i的c的前缀和 容易写出dp转移式: dpi ...

最新文章

  1. Java数组常用操作,创建,比较,排序,检索,打印数组;copyOf,equals,sort,toString
  2. 框架应用 : Spring - 开发详述
  3. fftw库 vs2019_FFTW库在VS 2010中的使用方法
  4. 元件库导入_Axure RP9【元件库的学习】
  5. 设置DIV半透明CSS代码:
  6. git(10)---GIT对象模型
  7. 百度echarts极速入门
  8. CLR_via_C#.3rd 翻译[25.8 使用线程的理由]
  9. Web Server的启动过程
  10. 软件测试项目实战学习路线
  11. 【前端面试之缓存】js本地缓存、浏览器缓存、服务器缓存
  12. Python进行拉勾网数据爬取框架与思路
  13. Q4财报再次显示,百度在2B市场的竞争中已占据领先地位
  14. 电商平台后台管理系统--->操作方法说明
  15. Swift实战之2048小游戏
  16. 一位程序员搬家到新加坡的体验
  17. TJCTF之Bricked Binary
  18. MySql学习笔记(2)--数据库操作及数据管理
  19. 非安装tomcat,服务安装_离水的鱼_新浪博客
  20. Android最新手机号正则判断(含最新166/198/199开头的手机号)

热门文章

  1. kafka数据 落盘_Kafka数据可靠性保证三板斧-ACK/ISR/HW
  2. java中重新加载指定文件_java-更改后重新加载属性文件
  3. 华为服务器系统蓝屏,服务器主机蓝屏
  4. php原生sql语法,thinkphp执行原生SQL语句的实现方法
  5. java getrealpath_JavaEE路径陷阱之getRealPath
  6. vb.net mysql存储图片_怎么让VB.NET 上传图片到SQL 数据库只保存路径,图片保存到文件...
  7. LeetCode 112. 路径总和 、113. 路径总和 II 思考分析
  8. 剑指 Offer 57 - II. 和为s的连续正数序列 思考分析
  9. scala 访问修饰符_Scala中的访问修饰符
  10. java vector_Java Vector size()方法与示例