网上的题解...状态就没有一个和我一样的...这让我有些无从下手...

分析:

我们考虑,正常的斜率优化满足x(i)单调递增,k(i)单调递增,那么我们就可以只用维护一个单调队列满足对于当前的x(i)有最小值即可,因为x(i)满足单调递增。这样的话,我们就可以维护一个单调队列让队首元首最小。而这道题,可以发现有部分数据满足x(i)单调递增,那么直接裸上就可以,但是由于时间有负数,所以x(i)并不满足单调性。但是由于k(i)仍然满足单调性,因此,我们依然可以发现更新x(i)的时候满足斜率优化的性质,也就是我们已经可以将已经完全被覆盖的直线忽略。(即:我们依然可以维护一个大凹包)

考虑n^2的DP方程:f[i]表示当前的最后一段区间在以i为终点时的最小花费。

转移:f[i]=min{f[j]+(sum1[i]-sum1[j]+m)*(sum2[n]-sum2[j])};

之后,我们发现在我们维护的队列中,对于相同的x(i),不同的j,更新的f[i]具有单峰性,那么导函数具有单调性,二分导函数,找到最大值,之后更新答案,剩下的就是斜率优化的常规操作了。

附上代码:

#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <iostream>
using namespace std;
#define N 300005
#define ll long long
#define K(x) (-sum2[x])
#define B(x) (f[x]-sum1[x]*sum+sum1[x]*sum2[x]-m*sum2[x])
#define Y(x,y) (K(y)*sum1[x]+B(y))
int n,q[N];
ll f[N],sum1[N],sum2[N],sum,m;
bool cmp(int i,int j,int k)
{
ll t1=(K(j)-K(k))*(B(i)-B(k));
ll t2=(K(i)-K(k))*(B(j)-B(k));
return t1<=t2;
}
bool check(int p1,int p2,int i)
{
return /*f[p2]-sum2[p2]*(sum1[i]+m)*/Y(i,p2)</*f[p1]-(sum1[i]+m)*sum2[p1]*/Y(i,p1);
}
int main()
{
scanf("%d%lld",&n,&m);
for(int i=1,x,y;i<=n;i++)
{
scanf("%d%d",&x,&y);
sum1[i]=sum1[i-1]+x;
sum2[i]=sum2[i-1]+y;
}
sum=sum2[n];int t=0;memset(f,0x3f,sizeof(f));f[0]=0;
for(int i=1;i<=n;i++)
{
int l=0,r=t;
while(l<r)
{
int mid=(l+r)>>1;
if(check(q[mid],q[mid+1],i))l=mid+1;
else r=mid;
}
// printf("%d\n",q[l]);
f[i]=Y(i,q[l])+sum*sum1[i]+m*sum;
while(t&&cmp(q[t-1],q[t],i))t--;
q[++t]=i;
}
printf("%lld\n",f[n]);return 0;
}

  

[SDOI2012]任务安排 BZOJ2726 斜率优化+二分查找的更多相关文章

  1. BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分

    BZOJ_2726_[SDOI2012]任务安排_斜率优化+二分 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这 ...

  2. BZOJ2726 [SDOI2012]任务安排 【斜率优化 + cdq分治】

    题目 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若干批,每批包含相邻的若干任务.从时刻0开始,这些任务被分批加工,第i ...

  3. 2018.09.05 bzoj2726: [SDOI2012]任务安排(斜率优化dp+二分)

    传送门 跟Ti" role="presentation" style="position: relative;">TiTi为正数的时候差不多. ...

  4. BZOJ.2726.[SDOI2012]任务安排(DP 斜率优化)

    题目链接 数据范围在这:https://lydsy.com/JudgeOnline/wttl/thread.php?tid=613, 另外是\(n\leq3\times10^5\). 用\(t_i\) ...

  5. hdu2993之斜率dp+二分查找

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  6. BZOJ2726【SDOI2012】任务安排(斜率优化Dp+二分查找)

    由题目条件显然可以得到状态 f[i][j] 表示以 i 为结尾且 i 后作为断点,共做了 j 次分组的最小代价. 因此转移变得很显然:f[i][j]=min{f[k][j-1]+(s×j+sumT[i ...

  7. [BZOJ2726][SDOI2012]任务安排(DP+凸壳二分)

    2726: [SDOI2012]任务安排 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1580  Solved: 466[Submit][Statu ...

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

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

  9. 2018.09.05 任务安排(斜率优化dp)

    描述 这道题目说的是,给出了n项必须按照顺序完成的任务,每项任务有它需要占用机器的时间和价值.现在我们有一台机器可以使用,它每次可以完成一批任务,完成这批任务所需的时间为一个启动机器的时间S加上所有任 ...

随机推荐

  1. JPEG/PNG/GIF图片格式简析

    JPEG/PNG/GIF是Web浏览器广泛支持的3种图片格式. 1.JPEG格式最适合保存照片和其他复杂图像. 2.GIF和PNG格式最适合保存logo和其他包含单色.线条.文本的简单图形. 3.JP ...

  2. C# Newtonsoft.Json反序列化为dynamic对象之后的使用

    通过Newtonsoft.Json将一个json类型的字符串反序列化为dynamic后直接使用报错 源代码: namespace ConsoleApplication1 { class Program ...

  3. OSGI企业应用开发(十二)OSGI Web应用开发(一)

    前面文章中介绍了如何在OSGI应用中整合Spring和Mybatis框架,本篇文章开始介绍如何使用OSGI技术开发Web应用.对于传统的Java EE应用,应用中涉及到的Web元素无非就是Servle ...

  4. ActiveReports 报表应用教程 (14)---数据可视化

    葡萄城ActiveReports报表中提供了丰富的数据可视化解决方案,用户可以将数据以图像化的方式进行显示,让报表数据更加形象且便于理解.在葡萄城ActiveReports报表中提供了大多数常用的二维 ...

  5. MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明

    MariaDB.MySQL存储过程.游标基础应用举例说明 by:授客 QQ:1033553122 测试环境: MariaDB-10.0.19-centos7-x86_64 实践操作: # 创建测试数据 ...

  6. Python 基于python实现的http接口自动化测试框架(含源码)

    基于python实现的http+json协议接口自动化测试框架(含源码) by:授客 QQ:1033553122      欢迎加入软件性能测试交流 QQ群:7156436  由于篇幅问题,采用百度网 ...

  7. Emmagee app性能测试工具使用教程

    Emmagee app性能测试工具使用教程 by:授客 QQ:1033553122 简介 Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个Ap ...

  8. ubuntu 搭建samba共享方案

    1.samba服务安装搭建 sudo apt-get install samba sudo vim /etc/samba/smb.conf workgroup = szsoft 设置用户密码登陆方式s ...

  9. XML与DataSet的相互转换

    转:https://www.cnblogs.com/kunEssay/p/6168824.html XML与DataSet的相互转换的类 一.XML与DataSet的相互转换的类 using Syst ...

  10. 使用 Azure 门户创建 Windows 虚拟机

    可以通过 Azure 门户创建 Azure 虚拟机. 此方法提供一个基于浏览器的用户界面,用于创建和配置虚拟机和所有相关的资源. 本快速入门介绍了如何创建虚拟机并在 VM 上安装 webserver. ...