2018.09.05 bzoj2726: [SDOI2012]任务安排(斜率优化dp+二分)
传送门
跟Ti" role="presentation" style="position: relative;">TiTi为正数的时候差不多。
只是这个时候time" role="presentation" style="position: relative;">timetime数组没有了单调性,因此不能丢弃队头的元素,我们需要维护完整的下凸壳然后在上面二分。
写的时候如果用slope" role="presentation" style="position: relative;">slopeslope函数算斜率好像会爆掉几个点,精度真神奇。。。
代码:
#include<bits/stdc++.h>
#define ll long long
#define N 300005
using namespace std;
inline ll read(){
ll ans=0,w=1;
char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans*w;
}
int n,hd,tl,q[N];
ll S,tim[N],w[N],f[N];
inline double slope(int x,int y){return 1.0*(f[x]-f[y])/(1.0*(w[x]-w[y]));}
inline int find(ll cmp){
if(hd==tl)return q[hd];
int l=hd,r=tl;
while(l<r){
int mid=l+r>>1;
if(f[q[mid+1]]-f[q[mid]]<=cmp*(w[q[mid+1]]-w[q[mid]]))l=mid+1;
else r=mid;
}
return q[l];
}
int main(){
n=read(),S=read(),hd=1,tl=1;
for(int i=1;i<=n;++i)tim[i]=read()+tim[i-1],w[i]=read()+w[i-1];
for(int i=1;i<=n;++i){
int pos=find(S+tim[i]);
f[i]=f[pos]+S*(w[n]-w[pos])+tim[i]*(w[i]-w[pos]);
while(hd<tl&&(f[q[tl]]-f[q[tl-1]])*(w[i]-w[q[tl]])>=(f[i]-f[q[tl]])*(w[q[tl]]-w[q[tl-1]]))--tl;
q[++tl]=i;
}
cout<<f[n];
return 0;
}
2018.09.05 bzoj2726: [SDOI2012]任务安排(斜率优化dp+二分)的更多相关文章
- BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]
2726: [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 868 Solved: 236[Submit][Status ...
- 2018.09.07 codeforces311B. Cats Transport(斜率优化dp)
传送门 斜率优化dp好题. 对于第i只猫,显然如果管理员想从出发开始刚好接到它,需要在t[i]=h[i]−dist(1,i)" role="presentation" s ...
- [SDOI2012]任务安排 - 斜率优化dp
虽然以前学过斜率优化dp但是忘得和没学过一样了.就当是重新学了. 题意很简单(反人类),利用费用提前的思想,考虑这一次决策对当前以及对未来的贡献,设 \(f_i\) 为做完前 \(i\) 个任务的贡献 ...
- [bzoj2726][SDOI2012]任务安排 ——斜率优化,动态规划,二分,代价提前计算
题解 本题的状态很容易设计: f[i] 为到第i个物件的最小代价. 但是方程不容易设计,因为有"后效性" 有两种方法解决: 1)倒过来设计动态规划,典型的,可以设计这样的方程: d ...
- 2018.09.08 bzoj4518: [Sdoi2016]征途(斜率优化dp)
传送门 把式子展开后发现就是要求: m∗(∑i=1msum′[i])−sum[n]2" role="presentation" style="position: ...
- BZOJ 2726 [SDOI2012] 任务安排 - 斜率优化dp
题解 转移方程与我的上一篇题解一样 : $S\times sumC_j + F_j = sumT_i \times sumC_j + F_i - S \times sumC_N$. 分离成:$S\t ...
- bzoj 2726 任务安排 斜率优化DP
这个题目中 斜率优化DP相当于存在一个 y = kx + z 然后给定 n 个对点 (x,y) 然后给你一个k, 要求你维护出这个z最小是多少. 那么对于给定的点来说 我们可以维护出一个下凸壳,因为 ...
- 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治
[BZOJ2726][SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若 ...
- BZOJ2726【SDOI2012】任务安排(斜率优化Dp+二分查找)
由题目条件显然可以得到状态 f[i][j] 表示以 i 为结尾且 i 后作为断点,共做了 j 次分组的最小代价. 因此转移变得很显然:f[i][j]=min{f[k][j-1]+(s×j+sumT[i ...
随机推荐
- leetcode91
class Solution { public int numDecodings(String s) { if(s.length()==0){ return 0; } int[] dp = new i ...
- 批量得到/修改word超链接
Alt+F9或者勾选下面 此时的超链接地址全部转换为文本形式进行显示; 然后可以用全局替换搜索来处理
- MySQLNonTransientConnectionException
将mysql-connector-java和druid升级到最新版本: 将驱动设置为driver-class-name: com.mysql.cj.jdbc.Driver url要加上时区设置:url ...
- 使用curl发起https请求
"SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:S ...
- spring事务没回滚
最近遇见一个问题,用spring管理实务,在service层处理数据,保存数据时出现异常,但没有回滚,检查了一下,发现是因为我用try catch将异常进行捕获了,没有抛出导致的:默认spring事务 ...
- where 命令
在当前目录及path环境变量指定的目录中搜索相应文件 例:where msbuild 查找msbuild的位置
- How to Pronounce PROBABLY
How to Pronounce PROBABLY Share Tweet Share Though this is a content word, it’s frequently reduced. ...
- adb连接过程中常见问题解决方法
在测试过程中经常会遇到需要使用adb连接服务器的问题,但是有时候经常会遇到连不上的情况,总结两种解决方式 1)error: unknown host service 此问题是由于端口号已经被占用了,可 ...
- ubuntu 软件包系统已损坏 解决方法
sudo apt-get clean sudo apt-get -f install sudo apt-get upgrade
- 02 Tensorflow的安装配置
1 anaconda 64 位,win10 安装 清华大学镜像网络,下载地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 选择下载文件 ...