BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分
BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分
Description
Input
Output
Sample Input
1 3
3 2
4 3
2 3
1 4
Sample Output
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
#define N 300050
int n,m,xx[N],yy[N],Q[N],l,r;
ll f[N],sx[N],sy[N],sum;
ll K(int j) {
return -sy[j];
}
ll B(int j) {
return f[j]-sx[j]*sum-m*sy[j]+sx[j]*sy[j];
}
ll Y(int i,int j) {
return K(j)*sx[i]+B(j);
}
bool cover(int p1,int p2,int p3) {
// return (K(p1)-K(p3))*(B(p2)-B(p1))>=(K(p1)-K(p2))*(B(p3)-B(p1));
return (K(p2)-K(p3))*(B(p1)-B(p3))<=(B(p3)-B(p2))*(K(p3)-K(p1));
}
bool check(int p1,int p2,int i) {
return B(p1)-B(p2)>=sx[i]*(K(p2)-K(p1));
}
int main() {
scanf("%d%d",&n,&m);
int i,j;
for(i=1;i<=n;i++) {
scanf("%d%d",&xx[i],&yy[i]);
sx[i]=sx[i-1]+xx[i];
sy[i]=sy[i-1]+yy[i];
}
sum=sy[n];
memset(f,0x3f,sizeof(f));
f[0]=0;
/*for(i=1;i<=n;i++) {
for(j=0;j<i;j++) {
f[i]=min(f[i],f[j]+(m+sx[i]-sx[j])*(sum-sy[j]));
}
}*/
r=1;
/*for(i=1;i<=n;i++) {
while(l<r-1&&Y(i,Q[l])>=Y(i,Q[l+1])) l++;
j=Q[l];
printf("%d\n",j);
f[i]=Y(i,j)+m*sum+sx[i]*sum;
while(l<r-1&&cover(Q[r-2],Q[r-1],i)) r--;
Q[r++]=i;
}*/
for(i=1;i<=n;i++) {
int ll=l,rr=r-1;
while(ll<rr) {
int mid=(ll+rr)>>1;
if(check(Q[mid],Q[mid+1],i)) ll=mid+1;
else rr=mid;
}
j=Q[ll];
//printf("%d\n",j);
f[i]=Y(i,j)+m*sum+sx[i]*sum;
while(l<r-1&&cover(Q[r-2],Q[r-1],i)) r--;
Q[r++]=i;
}
printf("%lld\n",f[n]);
}
BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分的更多相关文章
- [SDOI2012]任务安排 BZOJ2726 斜率优化+二分查找
网上的题解...状态就没有一个和我一样的...这让我有些无从下手... 分析: 我们考虑,正常的斜率优化满足x(i)单调递增,k(i)单调递增,那么我们就可以只用维护一个单调队列满足对于当前的x(i) ...
- BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】
题目 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i ...
- 2018.09.05 bzoj2726: [SDOI2012]任务安排(斜率优化dp+二分)
传送门 跟Ti" role="presentation" style="position: relative;">TiTi为正数的时候差不多. ...
- BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)
题目链接 数据范围在这:https://lydsy.com/JudgeOnline/wttl/thread.php?tid=613, 另外是\(n\leq3\times10^5\). 用\(t_i\) ...
- BZOJ_3675_[Apio2014]序列分割_斜率优化
BZOJ_3675_[Apio2014]序列分割_斜率优化 Description 小H最近迷上了一个分隔序列的游戏.在这个游戏里,小H需要将一个长度为n的非负整数序列分割成k+1个非空的子序列.为了 ...
- BZOJ_4518_[Sdoi2016]征途_斜率优化
BZOJ_4518_[Sdoi2016]征途_斜率优化 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到 ...
- BZOJ_1713_[Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会_斜率优化
BZOJ_1713_[Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会_斜率优化 Description Input 第1行输入 ...
- BZOJ2726【SDOI2012】任务安排(斜率优化Dp+二分查找)
由题目条件显然可以得到状态 f[i][j] 表示以 i 为结尾且 i 后作为断点,共做了 j 次分组的最小代价. 因此转移变得很显然:f[i][j]=min{f[k][j-1]+(s×j+sumT[i ...
- [BZOJ2726][SDOI2012]任务安排(DP+凸壳二分)
2726: [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1580 Solved: 466[Submit][Statu ...
随机推荐
- Elasticsearch使用syslog发送Watcher告警事件
https://blog.csdn.net/mvpboss1004/article/details/70158864?locationNum=9&fps=1
- code forces 1051 d
看的这个题解:http://www.cnblogs.com/tobyw/p/9685639.html 写的比较清楚. 矩阵类型的计数题 比赛时感觉就像是个dp,然后就跳过了. 现在看着题解写一下,感觉 ...
- Ajax 实现文件的下载
JQuery的ajax函数的返回类型只有xml.text.json.html等类型,没有“流”类型,所以我们要实现ajax下载,不能够使用相应的ajax函数进行文件下载.但可以用js生成一个form, ...
- (45)C#网络3 socket
一.TCP传输 using System.Net.Sockets; 1.最基本客户端连服务器 服务端运行后一直处于监听状态,客户端每启动一次服务端就接收一次连接并打印客户端的ip地址和端口号.(服务端 ...
- springBoot 跨域处理
首先喝水不忘挖井人,博客参考:https://www.cnblogs.com/nananana/p/8492185.html 方式一:新增一个configration类 或 在Application中 ...
- SUPEROBJECT序列数据集为JSON
// SUPEROBJECT 序列数据集 cxg 2017-1-12// {"data":[{"c1":1,"c2":1}]};// DEL ...
- 数据库系统学习(十)-嵌入式SQL语言之动态SQL
第十讲 嵌入式SQL语言之动态SQL 静态SQL 区别变量和属性:高级语言向嵌入式SQL传递变量的方法 动态SQL 动态构造SQL语句是应用程序员必须掌握的重要手段 SQL语句的动态构造示例 根据界面 ...
- Python基础语法04-数据结构
Python Number(数字) Python Number 数据类型用于存储数值. 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值,将重新分配内存空间. Python 支持 ...
- python—networkx:依据图的权重绘图
首先输入边和边的权重,随后画出节点位置.依据权重大小划分实边和虚边 #coding:utf-8 #!/usr/bin/env python """ An example ...
- C# -- 推断字符能否转化为整形
int iNum = 0; string sNumber = "1003"; int iResult = 0; int.TryParse(sNumber, out iResult) ...