题目

\(N\) 个任务排成一个序列在一台机器上等待完成(顺序不得改变),这 \(N\) 个任务被分成若干批,每批包含相邻的若干任务。从时刻 \(0\) 开始,这些任务被分批加工,第 \(i\) 个任务单独完成所需的时间是 \(T_i\)。在每批任务开始前,机器需要启动时间 \(S\),而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成)。每个任务的费用是它的完成时刻乘以一个费用系数 \(F_i\)。请确定一个分组方案,使得总费用最小。

分析

可以使用费用提前计算的技巧,把后面的费用移到前面计算。

设 \(d_i\) 代表到前 \(i\) 个任务的最小代价:\(F,T\) 分别为 \(f,t\) 数组的前缀和

\[\begin{align*}
d_i & = \min_{j=0}^{i-1} \{d_j + S(F_n - F_j) + T_i (F_i - F_j)\} \\
& = \min_{j=0}^{i-1} \{d_j + S F_n - S F_j + T_i F_i - T_i F_j\} \\
& = \min_{j=0}^{i-1} \{d_j - S F_j - T_i F_j\} + T_i F_i + S F_n \\
\end{align*}
\]

令:\(b = d_j - ST_j - T_iF_j\), 则有:

\[\begin{align*}
b & = d_j - SF_j - T_iF_j\\
d_j - SF_j & = b + T_iF_j \\
\end{align*}
\]

令 \(y=d_j-SF_j\), \(x=F_j\), \(k = T_i\), 这就是我们常见的斜率优化式。

显然 \(T_i\) 单调递增。

代码

#include <bits/stdc++.h>

int const kMaxN = 1e6 + 5;

std::deque<int> que;
int d[kMaxN], f[kMaxN], t[kMaxN], F[kMaxN], T[kMaxN], S, n; inline int X(int i) {return F[i];}
inline int Y(int i) {return d[i] - S * F[i];}
inline double Slope(int i, int j) {return (Y(i) - Y(j)) / (double)(X(i) - X(j));} int main() {
memset(d, 0x3f, sizeof(d));
scanf("%d%d", &n, &S);
for(int i = 1; i <= n; i++) {
scanf("%d%d", t + i, f + i);
T[i] = T[i - 1] + t[i];
F[i] = F[i - 1] + f[i];
}
d[0] = 0;
que.push_back(0);
for(int i = 1; i <= n; i++) {
while(que.size() > 1 && Slope(que[0], que[1]) < T[i]) que.pop_front();
int j = que[0];
d[i] = d[j] + S * (F[n] - F[j]) + T[i] * (F[i] - F[j]);
while(que.size() > 1 &&
Slope(que.back(), i) < Slope(que.back(), que[que.size() - 2])
)
que.pop_back();
que.push_back(i);
}
printf("%d", d[n]);
return 0;
}

【IOI 2002/FJOI2019】任务安排(超级计算机)的更多相关文章

  1. POJ 1180 斜率优化DP(单调队列)

    Batch Scheduling Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4347   Accepted: 1992 ...

  2. POJ 1054 The Troublesome Frog

    The Troublesome Frog Time Limit: 5000MS Memory Limit: 100000K Total Submissions: 9581 Accepted: 2883 ...

  3. IOI2002 POJ1054 The Troublesome Frog 讨厌的青蛙 (离散化+剪枝)

    Description In Korea, the naughtiness of the cheonggaeguri, a small frog, is legendary. This is a we ...

  4. POJ1180 Batch Scheduling 解题报告(斜率优化)

    题目链接:http://poj.org/problem?id=1180 题目描述: There is a sequence of N jobs to be processed on one machi ...

  5. P2365 任务安排 / [FJOI2019]batch(斜率优化dp)

    P2365 任务安排 batch:$n<=10000$ 斜率优化入门题 $n^{3}$的dp轻松写出 但是枚举这个分成多少段很不方便 我们利用费用提前的思想,提前把这个烦人的$S$在后面的贡献先 ...

  6. luogu P2365 任务安排(FJOI2019 batch)

    洛谷传送门 FJOI 日常原题 $2333$(似乎还不如 SDOI2012 任务安排 $2333$) 显然考虑 $dp$,这个是经典的把未来的代价先计算的 $dp$,然后才是斜率优化 一开始想状态时一 ...

  7. 《Linux及安全》实验安排

    SEED(SEcurity EDucation)项目由雪城大学杜文亮教授2002年创立,为计算机教学提供一套信息安全实验环境,目前已开发超过30个实验,涵盖广泛的安全原理,被全世界数百个高校采用. 实 ...

  8. POJ1158 城市交通Traffic lights IOI 1999 (最短路)

    POJ1158 城市交通Traffic lights IOI 1999 (最短路) (1) 问题描述(probolem) 在d城里交通的安排不同寻常,城中有路口和路口之间的道路,再任意两个不同的路口之 ...

  9. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

随机推荐

  1. this作用域详解

    大家在使用Javascript的时候经常被this这个家伙搞得晕头转向的.在Javascript中它却显得古灵精怪的,因为它不是固定不变的,而是随着它的执行环境的改变而改变.在Javascript中t ...

  2. Python实现读取json文件到excel表

    一.需求 1.'score.json' 文件内容: { "1":["小花",99,100,98.5], "2":["小王" ...

  3. 使用maven创建项目

    http://192.168.4.112/rdmanager/main/index.jhtml 1.对于第一次下载某个项目的源码,按照下面的步骤进行: (1)在D:\projects\目录下的空白位置 ...

  4. 商城管理系统项目(前台+后台+管理员+用户+html+jsp)

    管理员后台 用户前台 如果下载项目报错,加包即可(包已经打包放在下载地址) 数据库:mysql drop database shoppingmall; create database shopping ...

  5. ffmpeg一些filter用法、以及一些功能命令

    来源:http://blog.csdn.net/dancing_night/article/details/46776903 1.加字幕 命令:ffmpeg -i <input> -fil ...

  6. ABAP术语-Lock Argument

    Lock Argument 原文:http://www.cnblogs.com/qiangsheng/archive/2008/02/29/1085717.html Locked fields in ...

  7. 使用Python读取Dbf文件

    DBF:一种特殊的文件格式!表示数据库文件,Foxbase,Dbase,Visual FoxPro等数据库处理系统所产生的数据库文件! DBF 数据库是常用的桌面型数据库,它曾经被各企业.事业单位广泛 ...

  8. 老刘的Linux小课堂开课了

    经过几个月的等待,刘遄老师的LINUX课堂终于开课了,从现在开始,我会在博客里将每一堂课的笔记记录下来,记录自己的每一步成长. 由于是第一次开课,老刘只是简单的介绍了LINUX相关的一些概念,比如开源 ...

  9. C# 多条件拼接sql

    #region 多条件搜索时,使用List集合来拼接条件(拼接Sql) StringBuilder sql = new StringBuilder("select * from PhoneN ...

  10. Django模板语言(DTL)基础

    ## 模板变量 - 普通变量 {{ name }} - 对象变量(使用点号访问对象属性和方法,方法不加括号) {{ person.name }} ## 常用模板标签 # if标签,支持and,or,n ...