题解 斜率优化经典题 任务安排*6

任务安排

部分表述来源于《算法竞赛进阶指南》。

题面

题目描述

n n n 个任务排成一个序列在一台机器上等待完成(顺序不得改变),这 n n n 个任务被分成若干批,每批包含相邻的若干任务。

从零时刻开始,这些任务被分批加工,第 i i i 个任务单独完成所需的时间为 t i t _i ti 。在每批任务开始前,机器需要启动时间 s s s,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成)。

每个任务的费用是它的完成时刻乘以一个费用系数 c i c_ i ci。请确定一个分组方案,使得总费用最小。

输入格式

第一行一个正整数 n n n
第二行是一个整数 s s s

下面 n n n 行每行有一对数,分别为 t i t_i ti c i c_i ci,表示第 i i i 个任务单独完成所需的时间是 t i t_ i ti 及其费用系数 f i f_i fi

输出格式

一个数,最小的总费用。

输入输出样例

输入 #1

5
1
1 3
3 2
4 3
2 3
1 4

输出 #1

153
样例解释

如果分组方案是 { 1 , 2 } , { 3 } , { 4 , 5 } \{1,2\},\{3\},\{4,5\} { 1,2},{ 3},{ 4,5},则完成时间分别为 { 5 , 5 , 10 , 14 , 14 } \{5,5,10,14,14\} { 5,5,10,14,14},费用 C = 15 + 10 + 30 + 42 + 56 C=15+10+30+42+56 C=15+10+30+42+56,总费用就是 153 153 153

任务安排 1( O ( n 3 ) O(n^3) O(n3)

数据范围: 1 ≤ n ≤ 100 , 1 ≤ s ≤ 50 , 1 ≤ t i , c i ≤ 100 1\leq n \leq 100,1\leq s \leq 50,1\leq t_i,c_i \leq 100 1n100,1s50,1ti,ci100

求出 t , c t,c t,c 的前缀和 s u m t , s u m c sumt, sumc sumt,sumc,设 f i , j f_{i,j} fi,j 表示把前 i i i 个任务分成 j j j 批的最小费用,则第 j j j 批任务完成的时间为 j ∗ s + s u m t i j*s+sumt_i js+sumti,状态转移方程:
f i , j = min ⁡ 0 ≤ k < i { f k , j − 1 + ( j ∗ s + s u m t i ) ( s u m c i − s u m c k ) } f_{i,j}=\min_{0\leq k < i}\{f_{k,j-1}+(j*s+sumt_i)(sumc_i-sumc_k)\} fi,j=0k<imin{ fk,j1+(js+sumti)(sumcisumck)}

任务安排 2( O ( n 2 ) O(n^2) O(n2)

数据范围: 1 ≤ n ≤ 5000 , 1 ≤ s ≤ 50 , 1 ≤ t i , c i ≤ 100 1\leq n \leq 5000,1\leq s \leq 50,1\leq t_i,c_i \leq 100 1n5000,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值