bzoj3437小P的牧场

题意:

n个牧场,在每个牧场见控制站的花费为ai,在该处建控制站能控制从此处到左边第一个控制站(或边界)之间的牧场。一个牧场被控制的花费等于它到控制它的控制站之间的牧场数目(不包括自身,但包括控制站所在牧场)乘上该牧场的放养量。求最小费用。

题解:

推公式:

f[i]=f[j]+sigma(k,j+1,i)((i-k)*b[k])+a[i]

=f[j]+sigma(k,j+1,i)(i*b[k]-k*b[k])+a[i]

=f[j]+sigma(k,j+1,i)(i*b[k])-sigma(k,j+1,i)(k*b[k])+a[i]

=f[j]+i*sigma(k,j+1,i)b[k]-sigma(k,j+1,i)(k*b[k])+a[i]

sigma(k,j+1,i)b[k]和sigma(k,j+1,i)k*b[k]可用前缀和维护,故原式=f[j]+i*(sum1[i]-sum1[j])-(sum2[i]-sum2[j])+a[i],然后就可以斜率优化了:

f[j]+i*(sum1[i]-sum1[j])-(sum2[i]-sum2[j])+a[i]<f[k]+i*(sum1[i]-sum1[k])-(sum2[i]-sum2[k])+a[i]

等价于f[j]-i*sum1[j]+sum2[j]<f[k]-i*sum1[k]+sum2[k]等价于f[j]-f[k]+sum2[j]-sum2[k]<i*(sum1[j]-sum1[k]),当j<k时满足

(f[j]-f[k]+sum2[j]-sum2[k])/(sum1[j]-sum1[k])>i。

代码:

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define maxn 1000010
#define ll long long
using namespace std; inline ll read(){
char ch=getchar(); ll f=,x=;
while(ch<''||ch>''){if(ch=='-')f=-; ch=getchar();}
while(ch>=''&&ch<='')x=x*+ch-'',ch=getchar();
return f*x;
}
ll f[maxn],sm1[maxn],sm2[maxn],a[maxn]; int n,q[maxn],l,r;
inline double calc(int j,int k){
return ((double)f[j]-f[k]+sm2[j]-sm2[k])/((double)sm1[j]-sm1[k]);
}
int main(){
n=read(); inc(i,,n)a[i]=read();
inc(i,,n){ll b=read(); sm1[i]=sm1[i-]+b; sm2[i]=sm2[i-]+b*i;} l=r=; q[l]=;
inc(i,,n){
while(l<r&&calc(q[l],q[l+])<i)l++; f[i]=f[q[l]]+i*(sm1[i]-sm1[q[l]])-sm2[i]+sm2[q[l]]+a[i];
while(l<r&&calc(q[r-],q[r])>calc(q[r],i))r--; q[++r]=i;
}
printf("%lld",f[n]); return ;
}

20160811

bzoj3437小P的牧场的更多相关文章

  1. bzoj3437 小P的牧场(斜率优化dp)

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2025  Solved: 1110[Submit][Status][Discu ...

  2. bzoj3437小P的牧场 斜率优化dp

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1542  Solved: 849[Submit][Status][Discus ...

  3. BZOJ3437 小P的牧场 【斜率优化dp】

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1502  Solved: 836 [Submit][Status][Disc ...

  4. BZOJ3437:小P的牧场(斜率优化DP)

    Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制 ...

  5. BZOJ3437 小P的牧场 动态规划 斜率优化

    原文链接http://www.cnblogs.com/zhouzhendong/p/8696321.html 题目传送门 - BZOJ3437 题意 给定两个序列$a,b$,现在划分$a$序列. 被划 ...

  6. bzoj3437 小P的牧场

    斜率优化dp 代码 #include<cstdio> #include<algorithm> using namespace std; typedef long long ll ...

  7. 【BZOJ3437】小P的牧场 斜率优化

    [BZOJ3437]小P的牧场 Description 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这 ...

  8. 【BZOJ3437】小P的牧场(动态规划,斜率优化)

    [BZOJ3437]小P的牧场(动态规划,斜率优化) 题面 BZOJ 题解 考虑暴力\(dp\),设\(f[i]\)表示强制在\(i\)处建立控制站的并控制\([1..i]\)的最小代价. 很显然,枚 ...

  9. 【BZOJ-3437】小P的牧场 DP + 斜率优化

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 705  Solved: 404[Submit][Status][Discuss ...

随机推荐

  1. uiautomatorviewer 截取手机屏幕报错

    1. 解决办法: 1.在e盘新建一个文件夹,命名为app.uix 2.打开cmd命令,输入命令adb pull /sdcard/app.uix E:/app.uix 3.打开uiautomatorvi ...

  2. python中的importlib包

    importlib.import_module(name, package=None) 导入一个模块.参数 name 指定了以绝对或相对导入方式导入什么模块 (比如要么像这样 pkg.mod 或者这样 ...

  3. JavaSE基础之数组

    数组 一.静态初始化 格式一 数据类型[] 变量名 = {元素1,元素2,元素3...}; 格式二 数据类型[] 变量名 = new 数据类型{元素1,元素2,元素3...}; 或者: 数据类型[] ...

  4. deepin文件用途

    Bin:二进制文件, 存放二进制文件Dev:存放外接设备,其中外接设备不能被直接使用需要挂载(启动设备)Etc:存放配置文件Home:家目录,出了root用户外的其他用户类似于Windows中的use ...

  5. Eplan显示项目属性的编号设置方法

    打开eplan,点击选项->设置->用户->显示->用户界面.在“显示标识性的编号”前打勾.

  6. Spring Cloud面试题万字解析(2020面试必备)

    1.什么是 Spring Cloud? Spring cloud 流应用程序启动器是 于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成.Spring cloud Tas ...

  7. python 模块 来了 (调包侠 修炼手册一)

    模块 什么是模块 模块:就是一系列功能的结合体 ,也可以说 一个.py文件包含了 Python 对象定义和Python语 那么 他就 可以说是 一个模块 模块的三种来源: 1.内置的(python解释 ...

  8. Python 简明教程 --- 7,Python 字符串

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 过早的优化代码是罪恶之源. -- Donald Knuth 目录 无论哪种编程语言,字符串处理都是最 ...

  9. 吐血推荐,想进BAT必看

    不必太纠结于当下,也不必太忧虑未来,人生没有无用的经历,当你经历过一些事情后,眼前的风景已经和从前不一样了.--村上春树 一.包含如下内容 ActiveMQ消息中间件面试专题 BAT80道面试题 BA ...

  10. 基本 Docker 命令列表

    docker build -t friendlyname .# 使用此目录的 Dockerfile 创建镜像 docker run -p 4000:80 friendlyname # 运行端口 400 ...