【BZOJ3437】小P的牧场(动态规划,斜率优化)
【BZOJ3437】小P的牧场(动态规划,斜率优化)
题面
题解
考虑暴力\(dp\),设\(f[i]\)表示强制在\(i\)处建立控制站的并控制\([1..i]\)的最小代价。
很显然,枚举上一个控制站的位置\(j\)
\(f[i]=min(f[j]+Calc(i,j)+a[i])\),其中\(Calc(i,j)\)表示\(i,j\)之间被\(i\)控制的位置产生的贡献。
这个可以用前缀和优化做到\(O(1)\)计算\(Calc\)
预处理\(s1[i]=\sum b[i],s2[i]=\sum (n-i+1)*b[i]\)
那么\(Calc(i,j)=s2[i]-s2[j]-(s1[i]-s1[j])*(n-i+1)\)
考虑两个位置\(j,k\),满足\(k\lt j\),并且\(k\)的转移劣于\(j\)
那么
\(f[k]+Calc(i,k)\gt f[j]+Calc(i,j)\)
拆开之后是:
\(f[k]-s2[k]+s1[k]*(n-i+1)\gt f[j]-s2[j]+s1[j]*(n-i+1)\)
令\(g[i]=f[i]-s2[i]+s1[i]*(n+1)\)
将所有项按照是否与\(i\)相关分类,可以得到
\((g[k]-g[j])\gt (s1[k]-s1[j])*i\)
因为\(k<j\),所以\(s1[k]<s1[j]\),除过去要变号
\]
妥妥的斜率优化,因为\(i\)单增,可以单调队列解决。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define ll long long
#define RG register
#define MAX 1000100
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,a[MAX],b[MAX];
int Q[MAX],h,t;
ll f[MAX],s1[MAX],s2[MAX];
ll calc(int i,int j){return f[j]+s2[i]-s2[j]-(s1[i]-s1[j])*(n-i+1)+a[i];}
double Slope(int j,int k)
{
double gj=f[j]-s2[j]+1.0*s1[j]*(n+1);
double gk=f[k]-s2[k]+1.0*s1[k]*(n+1);
return 1.0*(gj-gk)/(s1[j]-s1[k]);
}
int main()
{
n=read();
for(int i=1;i<=n;++i)a[i]=read();
for(int i=1;i<=n;++i)b[i]=read();
for(int i=1;i<=n;++i)s1[i]=s1[i-1]+b[i];
for(int i=1;i<=n;++i)s2[i]=s2[i-1]+1ll*(n-i+1)*b[i];
Q[h=t=1]=0;
for(int i=1;i<=n;++i)
{
while(h<t&&Slope(Q[h],Q[h+1])<=i)++h;
int j=Q[h];f[i]=calc(i,j);
while(h<t&&Slope(Q[t],Q[t-1])>=Slope(Q[t-1],i))--t;
Q[++t]=i;
}
printf("%lld\n",f[n]);
}
【BZOJ3437】小P的牧场(动态规划,斜率优化)的更多相关文章
- BZOJ3437 小P的牧场 动态规划 斜率优化
原文链接http://www.cnblogs.com/zhouzhendong/p/8696321.html 题目传送门 - BZOJ3437 题意 给定两个序列$a,b$,现在划分$a$序列. 被划 ...
- bzoj3437 小P的牧场(斜率优化dp)
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2025 Solved: 1110[Submit][Status][Discu ...
- BZOJ3437 小P的牧场 【斜率优化dp】
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1502 Solved: 836 [Submit][Status][Disc ...
- 【BZOJ-3437】小P的牧场 DP + 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 705 Solved: 404[Submit][Status][Discuss ...
- BZOJ 3437 小P的牧场(斜率优化DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3437 [题目大意] n个牧场排成一行,需要在某些牧场上面建立控制站, 每个牧场上只能建 ...
- bzoj 3437: 小P的牧场【斜率优化】
emmm妹想到要倒着推 先假设只在n建一个控制站,这样的费用是\( \sum_{i=1}^{n} b[i]*(n-i) \)的 然后设f[i]为在i到n键控制站,并且i一定建一个,能最多节省下的费用, ...
- bzoj3437小P的牧场
bzoj3437小P的牧场 题意: n个牧场,在每个牧场见控制站的花费为ai,在该处建控制站能控制从此处到左边第一个控制站(或边界)之间的牧场.一个牧场被控制的花费等于它到控制它的控制站之间的牧场数目 ...
- 【学习笔记】动态规划—斜率优化DP(超详细)
[学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...
- bzoj3437小P的牧场 斜率优化dp
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1542 Solved: 849[Submit][Status][Discus ...
- BZOJ3437:小P的牧场(斜率优化DP)
Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制 ...
随机推荐
- Struts 2(五):输入校验 & 校验框架
第一节 Struts2输入校验 1.1 输入校验的重要性 输入校验分为客户端校验和服务器端校验.客户端校验用来过滤用户的错误操作,一般使用JavaScript代码实现.服务器端校验用来防止非法用户的恶 ...
- python-全栈开发-前方高能-内置函数
python_day_14 13. 前方高能-内置函数 ⼀. 本节主要内容: 1. 内置函数 什么是内置函数? 就是python给你提供的. 拿来直接⽤的函数, 比如print., input等等. ...
- PHP双向队列
假定队列的左边为头部,右边为尾部 <?php class myDeque { private $deque=array(); /** *头部进队列 */ public function lPus ...
- Centos下安装并设置nginx开机自启动
一.在centos环境下安装下载并安装nginx,由于nginx需要依赖一些环境才能安装,主要依赖g++.gcc.openssl-devel.pcre-devel和zlib-devel这些环境,首先得 ...
- 4星|《财经》2018年第13期:年轻人大多从大三和大四起开始就从QQ向微信转移
<财经>2018年第13期 总第530期 旬刊 本期主要话题是快递业,其他我感兴趣的重要话题还有:香港9价HPV疫苗断供风波:华盛顿邮报被贝佐斯收购后这几年的变化:北京二中朝阳学校的划片风 ...
- day03 作业 and 周末作业
请输出 name 变量对应的值中 "e" 所在索引位置? # name = "leX leNb"# num = 0# while num < len(na ...
- mysql group by 取第一条
select * from table where id in (select max(id) from table group by sku) 说明:id是自增序列,sku是表中的一个字段
- UI分析之石家庄铁道大学官网
点击进入石家庄铁道大学的官方网站,首先映入眼帘的是“石家庄铁道大学”七个大字,配以蓝色背景和学校的俯瞰图,给人一种严谨又不失清新的感觉. 学校的网站首页界面主要有九个界面,分别是网站首页,学校概况,组 ...
- hdu1242 Rescue DFS(路径探索题)
这里我定义的路径探索题指 找某路能够到达目的地,每次走都有方向,由于是探索性的走 之后要后退 那些走过的状态都还原掉 地址:http://acm.hdu.edu.cn/showproblem.php? ...
- ASP.NET Core 中的 Razor 页面介绍
标题:ASP.NET Core 中的 Razor 页面介绍 地址:https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/index?view ...