P1371 - [IOI2002]任务安排

Description

N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务。从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成)。每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。
例如:S=1;T={1,3,4,2,1};F={3,2,3,3,4}。如果分组方案是{1,2}、{3}、{4,5},则完成时间分别为{5,5,10,14,14},费用C={15,10,30,42,56},总费用就是153。

Input

第一行是N(1<=N<=5000)。
第二行是S(0<=S<=50)。
下面N行每行有一对数,分别为Ti和Fi,均为不大于100的正整数,表示第i个任务单独完成所需的时间是Ti及其费用系数Fi。

Output

一个数,最小的总费用。

Sample Input



1 3 
3 2 
4 3 
2 3 
1 4

Sample Output

153

Source

动态规划 ,斜率优化

Solution

考虑DP。

设t[i]为完成时间的后缀和,y[i]为所需费用的后缀和。

那么DP数组h[i]就为min(h[i],h[j]+y[i]*(t[i]-t[j]+m)),m为题中所述s。

最后输出h[1]即可。

Code

 #include <bits/stdc++.h>
#define int long long using namespace std; inline int read()
{
int f=,x=;
char c=getchar(); while(c<'' || c>'')
{
if(c=='-')f=-;
c=getchar();
} while(c>='' && c<='')
{
x=x*+c-'';
c=getchar();
} return f*x;
} int n,m,d[],s[],t[],y[],h[],sum,ans; signed main()
{
freopen("batch.in","r",stdin);
freopen("batch.out","w",stdout); n=read(),m=read(); for(register int i=; i<=n; i++)
{
d[i]=read(),s[i]=read();
} for(register int i=n; i; i--)
{
t[i]=t[i+]+d[i]; y[i]=y[i+]+s[i];
} memset(h,0x3f,sizeof(h)); h[n+]=; for(register int i=n; i; i--)
{
for(register int j=i+; j<=n+; j++)
{
h[i]=min(h[i],h[j]+y[i]*(t[i]-t[j]+m));
}
} printf("%lld",h[]); return ;
}

题解【CJOJ1371】[IOI2002]任务安排的更多相关文章

  1. Cogs 376. [IOI2002]任务安排(后效性DP)

    [IOI2002]任务安排 ★☆ 输入文件:batch.in 输出文件:batch.out 简单对比 时间限制:1 s 内存限制:128 MB N个任务排成一个序列在一台机器上等待完成(顺序不得改变) ...

  2. 【题解】警位安排( 树形 DP)

    [题目描述]一个重要的基地被分成了 n 个连通的区域 , 出于某种原因 , 这个基地以某一个区域为核心,呈一树形分布.在每个区域里安排警卫的费用是不同的,而每个区域的警卫都可以望见其相邻的区域 .如果 ...

  3. [IOI2002] 任务安排

    题目链接 题意 一些不能改变顺序的任务被分成若干批,每批包含相邻的若干任务.第 $i$ 个任务单独完成所需的时间是 $T_i$.在每批任务开始前,机器需要启动时间 $S$,而完成这批任务所需的时间是各 ...

  4. POJ3189:Steady Cow Assignment(二分+二分图多重匹配)

    Steady Cow Assignment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7482   Accepted: ...

  5. 信息学竞赛一本通提高版AC题解—例题1.1活动安排

    书中代码有误.书中为sort(a+1,a+n+1,Cmp). // // Created by yuxi on 19-1-13. // /* * * <信息学竞赛一本通-提高版>全部AC解 ...

  6. 洛谷P2365/5785 任务安排 题解 斜率优化DP

    任务安排1(小数据):https://www.luogu.com.cn/problem/P2365 任务安排2(大数据):https://www.luogu.com.cn/problem/P5785 ...

  7. 【luogu P2071 座位安排】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2071#sub 邻接表 + 匈牙利 把之前的邻接矩阵匈牙利变成邻接表 要不然存不下... code: #inc ...

  8. LOJ P10171 牧场的安排 题解

    每日一题 day6 打卡 Analysis 状压dp dp[i][j]+=dp[i-1][k]; #include<iostream> #include<cstdio> #in ...

  9. [SDOI2012] 任务安排 题解

    有感而发,遂书. 其实和sze聊了很久,但他还是退役了.恐怕他是本届里学oi时间最长的一个人吧,从小学五年级开始.我也是因为他,才开始学oi的.他因为学校的压力,不得不放弃.或许是没什么天赋.学了4年 ...

随机推荐

  1. 剑指offer-面试题11-旋转数组的最小数字-二分法

    /* 题目: 把一个数组最开始的若干个元素搬到数组末尾,我们称之为数组的旋转. 输入一个递增排序的数组的旋转,输出旋转数组中的最小元素. */ /* 思路: 采用二分的方法,旋转数组实质上是上左半部分 ...

  2. mysql 数据库中存在重复记录,删除保留其中一条

    DELETE FROM people WHERE peopleName IN ( SELECT peopleName FROM people GROUP BY peopleName HAVING ) ...

  3. Linux 用户命令

    用户管理的命令 添加删除用户,注意的是,涉及到权限的修改,只能用root去操作,其他人基本上没权限 useradd caixukun #创建用户caixukunpasswd   caixukun #给 ...

  4. STL版本

    STL - Standard Template Library , 是C++标准里面规定的模板库接口规范,但它只是接口规范,没有规定具体怎么实现. STL是C++标准的一部分,所以每个C++编译器都会 ...

  5. ubuntu安装pyenv

    安装依赖包 bash {.line-numbers} sudo apt-get update sudo apt-get install build-essential python-dev pytho ...

  6. C#使用OracleBulkCopy

    首先使用PL/SQL  通过语句:select * from v$version; 查询出使用的oracle版本,弄到对应版本的Oracle.DataAccess.DLL 我本地使用版本为:11.2. ...

  7. C#中怎样将数组的顺序打乱随机排序

    场景 在ZedGraph随机生成颜色时需要从颜色数组中取颜色对象. Color数组存取的是System.Drawing.Color的颜色. 其顺序是相邻的颜色,颜色差距不大,在取颜色时按顺序取颜色时, ...

  8. uniGUI之自定义JS事件动作ClientEvents(30)

    sender.setText('Over'); MainForm.UniLabel1.setPosition(x, y); MainForm.UniLabel1.setText('Click!');

  9. MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据)

    MATLAB用“fitgmdist”函数拟合高斯混合模型(一维数据) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在MATLAB中“fitgmdis ...

  10. 【巨杉数据库SequoiaDB】巨杉再获企业级认可,分布式数据库领跑“一亿中流”

    据全球最具权威的IT研究与顾问咨询公司 Gartner 预测,DBMS(数据库管理系统)市场从2017年到2018年增长了18.4%,达到461亿美元,这是有史以来最大幅的增长,并有望在2019年超过 ...