bzoj3437小P的牧场 斜率优化dp
3437: 小P的牧场
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 1542 Solved: 849
[Submit][Status][Discuss]
Description
小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧场一直到它西边第一个控制站的所有牧场(它西边第一个控制站所在的牧场不被控制)(如果它西边不存在控制站,那么它控制西边所有的牧场),每个牧场被控制都需要一定的花费(毕竟在控制站到牧场间修建道路是需要资源的嘛~),而且该花费等于它到控制它的控制站之间的牧场数目(不包括自身,但包括控制站所在牧场)乘上该牧场的放养量,在第i个牧场建立控制站的花费是ai,每个牧场i的放养量是bi,理所当然,小P需要总花费最小,但是小P的智商有点不够用了,所以这个最小总花费就由你来算出啦。
Input
第一行一个整数 n 表示牧场数目
第二行包括n个整数,第i个整数表示ai
第三行包括n个整数,第i个整数表示bi
Output
只有一行,包括一个整数,表示最小花费
Sample Input
2424
3142
Sample Output
样例解释
选取牧场1,3,4建立控制站,最小费用为2+(2+1*1)+4=9。
1<=n<=1000000, 0 < a i ,bi < = 10000
HINT
Source
正着推和bzoj1096类似 有点麻烦http://www.cnblogs.com/wsy01/p/8119725.html
我们考虑反着来做
假设只在n建立一个控制站 可以算出总花费 sum(b[i]*(n-i))
然后考虑 减去最多可以节省的花费
这个最多可以节省的花费可以这样算
f[i]表示在i建立一个控制站节省的最大代价
f[i]=f[j]-a[i]-sum[i]*(j-i) j>i
然后斜率优化。。
懒得写了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define ll long long
#define inf 9000000000000000000
#define MAX 1000000000000000000LL
using namespace std;
int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n;
int l=,r;
ll a[],b[];
int q[];
ll tot,ans,f[],sum[];
double cal(int j,int k)
{
return (double)(f[k]-f[j])/(double)(j-k);
}
int main()
{
n=read();
for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<=n;i++)b[i]=read();
for(int i=;i<=n;i++)sum[i]=sum[i-]+b[i];
for(int i=;i<n;i++)
tot+=b[i]*(n-i);
tot+=a[n];
q[++r]=n;
for(int i=n-;i;i--)
{
while(l<r&&cal(q[l],q[l+])>sum[i])l++;
int j=q[l];
f[i]=f[j]+sum[i]*(j-i)-a[i];
ans=max(ans,f[i]);
while(l<r&&cal(q[r],i)>cal(q[r-],q[r]))r--;
q[++r]=i;
}
printf("%lld",tot-ans);
return ;
}
bzoj3437小P的牧场 斜率优化dp的更多相关文章
- BZOJ3437:小P的牧场(斜率优化DP)
Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制 ...
- 【bzoj3437】小P的牧场 斜率优化dp
题目描述 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个 ...
- BZOJ 3437: 小P的牧场 斜率优化DP
3437: 小P的牧场 Description 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场 ...
- bzoj3427小P的牧场(斜率优化dp)
小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧 ...
- 【BZOJ3437】小P的牧场 斜率优化
[BZOJ3437]小P的牧场 Description 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这 ...
- bzoj 3437: 小P的牧场 -- 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MB Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号), ...
- BZOJ3437 小P的牧场 动态规划 斜率优化
原文链接http://www.cnblogs.com/zhouzhendong/p/8696321.html 题目传送门 - BZOJ3437 题意 给定两个序列$a,b$,现在划分$a$序列. 被划 ...
- bzoj3437小P的牧场
bzoj3437小P的牧场 题意: n个牧场,在每个牧场见控制站的花费为ai,在该处建控制站能控制从此处到左边第一个控制站(或边界)之间的牧场.一个牧场被控制的花费等于它到控制它的控制站之间的牧场数目 ...
- bzoj-4518 4518: [Sdoi2016]征途(斜率优化dp)
题目链接: 4518: [Sdoi2016]征途 Description Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成n段,相邻两段路的分界点设有休息站. Pine计划用m天到达T地 ...
随机推荐
- 《高级软件测试》JIRA使用手册(一)JIRA基本情况
JIRA 官方网站为:https://www.atlassian.com/software/jira 中文代理网站为:https://www.jira.cn 现版本:v7.3.0 Atlassian公 ...
- (原创)带模板的OLE输出EXCEL
其实带模板的OLE输出EXCEL就是将要输出的EXCEL中一些拥有固定值(如标题,表头行等)的单元格先填充好数据和设置好格式后作为模板上传到SAP 中.这样后续在输出EXCEL时只需从SAP中将模板下 ...
- openfalcon
一.环境准备 操作系统:centos7(minimal,www.centos.org下载的包是CentOS-7-x86_64-Minimal-1611.iso) 1.1 更换阿里yum(个人习惯) 步 ...
- Hadoop学习笔记一(HDFS架构)
介绍 Hadoop分布式文件系统(HDFS)设计的运行环境是商用的硬件系统.他和现存的其他分布式文件系统存在很多相似点.不过HDFS和其他分布式文件系统的区别才是他的最大亮点,HDFS具有高容错的特性 ...
- django的models模块查询方法
假定models中有一个类BookInfo 模块查询不同于sql语句,模块查询的结果会返回符合条件的整个一行的对象,或者多个对象组成的查询集. 查询集类似列表,有相似的方法. 1 model查询语句: ...
- 如何打开hprof文件
最近学习深入java虚拟机的书,照着里面的例子跑了下. 下面是demo: /** * VM Args:-Xms20m -Xmx20m -XX:+HeapDumpOnOutOfMemoryError * ...
- 关于vertical-align和line-height的真知灼见
本文的重点是了解vertical-align和line-height的使用 涉及到的名词:基线,底端,行内框,行框,行间距,替换元素及非替换元素,对齐.只有充分理解这些概念才会灵活运用这两个属性. 什 ...
- vue2路由
我们在前面的学习过程中不管是在学习angular还是vue1,都会遇到二级路由,我们现在先来看一下vue2中的一级路由. 首先要引入的是vue2与路由文件. js代码: <script> ...
- SpringMVC(十三):SpringMVC 与fastjson集成
1)fastjson jar包下载地址:https://sourceforge.net/projects/fastjson/下载完成后需要把jar包拷贝到WEB-INF/lib文件夹中.2)使用pom ...
- Struts(十七):通过CURD来学习paramsPrepareParams拦截器栈
背景: 通过上一章节<Struts(十六):通过CURD来学习Struts流程及ModelDriven的用法>学习了ModelDriven拦截器的用法,上章节中讲到了edit功能. 要修改 ...