笔记-[SDOI2012]任务安排

[SDOI2012]任务安排


\(f_i\) 表示分配到第 \(i\) 个任务的最小费用。

令 \(st_i=\sum_{h=1}^iT_h\),\(sc_i=\sum_{h=1}^iC_h\)。

\[\begin{split}
f_i=&\min\{f_j+st_i(sc_i-sc_j)+s(sc_n-sc_j)\}\\
f_i=&f_j+st_isc_i-st_isc_j+s\cdot sc_n-s\cdot sc_j\\
f_j-s\cdot sc_j=&st_isc_j+f_i-st_isc_i-s\cdot sc_n\\
\end{split}
\\
\therefore
\begin{cases}
y=f_j-s\cdot sc_j\\
k=st_i\\
x=sc_j\\
b=f_i-st_isc_i-s\cdot sc_n\\
\end{cases}
\\
\Large y=kx+b
\]

Code

#include <bits/stdc++.h>
using namespace std; //Start
#define re register
#define il inline
#define mk make_pair
#define pb push_back
#define db double
#define lng long long
#define fi first
#define se second
const int inf=0x3f3f3f3f;
const lng INF=0x3f3f3f3f3f3f3f3f; //Data
int n,s;
vector<lng> st,sc,f; //DP
int l,r;
vector<int> q;
il lng X(re int j){return sc[j];}
il lng Y(re int j){return f[j]-sc[j]*s;}
il int Find(re int L,re int R,re lng x){
while(L<R){
re int mid=(L+R)>>1;
if(Y(q[mid+1])-Y(q[mid])>=x*(X(q[mid+1])-X(q[mid]))) R=mid;
else L=mid+1;
}
return q[R];
}
il lng DP(){
l=1,r=0,q=vector<int>(n+7),q[++r]=0,f=vector<lng>(n+7);
for(re int i=1;i<=n;i++){
re int j=Find(l,r,st[i]);
f[i]=f[j]+st[i]*(sc[i]-sc[j])+(sc[n]-sc[j])*s;
while(l<r&&(Y(q[r-1])-Y(q[r]))*(X(q[r])-X(i))
>=(Y(q[r])-Y(i))*(X(q[r-1])-X(q[r]))) r--; q[++r]=i;
}
return f[n];
} //Main
int main(){
scanf("%d%d",&n,&s),st.pb(0),sc.pb(0);
for(re int i=1,t,c;i<=n;i++) scanf("%d%d",&t,&c),st.pb(st[i-1]+t),sc.pb(sc[i-1]+c);
printf("%lld\n",DP());
return 0;
}

\[\Huge\color{#ddd}{\texttt{---END---}}
\]

笔记-[SDOI2012]任务安排的更多相关文章

  1. BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )

    考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N)  F, T均为后缀和. 与j有关 ...

  2. [bzoj P2726] [SDOI2012]任务安排

    [bzoj P2726] [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1204 Solved: 349[Submit] ...

  3. BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]

    2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 868  Solved: 236[Submit][Status ...

  4. 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治

    [BZOJ2726][SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若 ...

  5. [BZOJ2726][SDOI2012]任务安排(DP+凸壳二分)

    2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1580  Solved: 466[Submit][Statu ...

  6. BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分

    BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这 ...

  7. bzoj 2726: [SDOI2012]任务安排

    Description 机 器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的 若干任务.从时刻0开始,这 ...

  8. BZOJ2726: [SDOI2012]任务安排

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2726 倒着做,前面的点对后面的点都是有贡献的. f[i]=min(f[j]+cost[i]*( ...

  9. BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)

    题目链接 数据范围在这:https://lydsy.com/JudgeOnline/wttl/thread.php?tid=613, 另外是\(n\leq3\times10^5\). 用\(t_i\) ...

随机推荐

  1. 守护进程详解以及start-stop-daemon命令

    1.概念:守护进程是在后台运行的不受终端控制的进程,通常守护进程在系统启动时自动运行,守护进程的名称通常以d结尾,比如sshd.xinetd.crond等. 2.创建守护进程的步骤:a.调用fork( ...

  2. c++中的几种函数调用约定(转)

    C++中的函数调用约定(调用惯例)主要针对三个问题: 1.参数传递的方式(是否采用寄存器传递参数.采用哪个寄存器传递参数.参数压桟的顺序等): 参数的传递方式,最常见的是通过栈传递.函数的调用方将参数 ...

  3. 磁盘构造/msdos分区(fdisk)格式化(mkfs)和挂载

    分区不是必要的,分区是与系统盘分开,防止数据丢失. 磁盘使用流程:查看磁盘(fdisk -l)---分区---格式化(创建文件系统)----挂载(自动挂载) 分区表类型:msdos(一般是系统分区)  ...

  4. ceph扩展bluestore的db分区

    前言 在ceph 14版本里面才加入了bluefs-bdev-migrate,分区迁移相关的命令,那么在12版本里面其实也是可以扩展分区的 测试的版本 [root@lab102 ceph-0]# ce ...

  5. Nginx下关于缓存控制字段cache-control的配置说明

    HTTP协议的Cache -Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程.请求时的缓存指令包括: no ...

  6. [原题复现+审计][RoarCTF 2019]Easy Calc(http协议走私、php字符串解析漏洞)

    简介  原题复现:  考察知识点:http协议走私.php字符串解析漏洞  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到 ...

  7. 写的太细了!Spring MVC拦截器的应用,建议收藏再看!

    Spring MVC拦截器 拦截器是Spring MVC中强大的控件,它可以在进入处理器之前做一些操作,或者在处理器完成后进行操作,甚至是在渲染视图后进行操作. 拦截器概述 对于任何优秀的MVC框架, ...

  8. mq TransientStorePool

    总得来说 有些像页高速缓存那样,为了避免页面被换出到交换区,mq申请了一块内存,并且用指定这些页面不能被操作系统换出,然后将这些内存分配给业务使用:

  9. 最佳置换算法OPT

    原文链接:https://www.jianshu.com/p/544ee20e307c

  10. python应用(7):输入与输出

    如前文,流程是程序的主角,而流程一般都需要处理数据,那数据如何进到流程,而最终处理后的数据又如何表现,这就是流程的输入与输出的问题. 本文介绍流程处理的数据的输入与输出. 流程中的输入,一般都会先保存 ...