BZOJ 3437 小P的牧场(斜率优化DP)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3437
【题目大意】
n个牧场排成一行,需要在某些牧场上面建立控制站,
每个牧场上只能建立一个控制站,每个控制站控制的牧场
是它所在的牧场一直到它西边第一个控制站的所有牧场
它西边第一个控制站所在的牧场不被控制,如果它西边不存在控制站,
那么它控制西边所有的牧场,每个牧场被控制都需要一定的花费,
而且该花费等于它到控制它的控制站之间的牧场数目乘上该牧场的放养量,
在第i个牧场建立控制站的花费是ai,每个牧场i的放养量是bi,
求最小总花费。
【题解】
考虑只在n建立控制站的情况,答案为∑b[i]*(n-i)
记dp[i]为考虑了i到n的情况,并且在i点建立了控制站的最优情况,
有dp[i]=max{dp[j]+sum[i]*(j-i)}-a[i]
=-a[i]-sum[i]*i+max(dp[j]+sum[i]*j)
为关于sum[i]的线性函数,那么对f(y)=x*y+dp[x]进行斜率优化
正向思路(by安琪):

【代码】
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=1000010;
int deq[N],n;
LL tot,ans,dp[N],S[N],a[N],b[N];
LL f(int x,LL y){return y*x+dp[x];}
bool check(int f1,int f2,int f3){
LL a1=f1,b1=dp[f1];
LL a2=f2,b2=dp[f2];
LL a3=f3,b3=dp[f3];
return (a2-a1)*(b3-b2)<=(b2-b1)*(a3-a2);
}
void solve(){
for(int i=1;i<=n;i++)S[i]=S[i-1]+b[i];
int s=0,t=1;
deq[0]=n;
for(int i=n-1;i;i--){
while(s+1<t&&f(deq[s],S[i])<=f(deq[s+1],S[i]))s++;
dp[i]=-a[i]-S[i]*i+f(deq[s],S[i]);
ans=max(ans,dp[i]);
while(s+1<t&&check(deq[t-2],deq[t-1],i))t--;
deq[t++]=i;
}printf("%lld\n",tot-ans);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)scanf("%lld",&b[i]);
for(int i=1;i<n;i++)tot+=b[i]*(n-i);
tot+=a[n]; solve();
return 0;
}
BZOJ 3437 小P的牧场(斜率优化DP)的更多相关文章
- BZOJ 3437: 小P的牧场 斜率优化DP
3437: 小P的牧场 Description 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场 ...
- bzoj 3437: 小P的牧场 -- 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MB Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号), ...
- bzoj3437小P的牧场 斜率优化dp
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1542 Solved: 849[Submit][Status][Discus ...
- 【bzoj3437】小P的牧场 斜率优化dp
题目描述 背景 小P是个特么喜欢玩MC的孩纸... 描述 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个 ...
- BZOJ3437:小P的牧场(斜率优化DP)
Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制 ...
- bzoj3427小P的牧场(斜率优化dp)
小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- bzoj 1597 [Usaco2008 Mar]土地购买——斜率优化dp
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1597 又一道斜率优化dp.负数让我混乱.不过仔细想想还是好的. 还可以方便地把那个负号放到x ...
- bzoj 3437: 小P的牧场【斜率优化】
emmm妹想到要倒着推 先假设只在n建一个控制站,这样的费用是\( \sum_{i=1}^{n} b[i]*(n-i) \)的 然后设f[i]为在i到n键控制站,并且i一定建一个,能最多节省下的费用, ...
随机推荐
- hibernate单列的多值查询
比如你的表主键是id,你要删除id 是 34,56,99 这样的.. uid是拼好的 比如 '34','56','99' ,以前我会这样写 String queryString = "upd ...
- 原生ES-Module在浏览器中的尝试
其实浏览器原生模块相关的支持也已经出了一两年了(我第一次知道这个事情实在2016年下半年的时候) 可以抛开webpack直接使用import之类的语法 但因为算是一个比较新的东西,所以现在基本只能自己 ...
- [c++,bson] linux 使用 BSON 编程[www]
[c++,bson] linux 使用 BSON 编程 http://blog.chinaunix.net/uid-28595538-id-4987410.html 1.js db=db.getSib ...
- wifi驱动移植
目标板:Hi3518 内核版本:linux3.0.8 1.修改makefile #PLATFORM = PC //注释掉 PLATFORM = HI3518 //支持平台 ifeq ($(PLAT ...
- pxe+kickstart自动化安装
什么是PXE? PXE(Pre-boot Execution Environment,预启动执行环境)是Intel公司开发的最新技术,工作于Client/Server模式.PXE是一种远程引导方式,要 ...
- java中的数组与集合相互转换
1.数组转换成集合 数组转换为集合,用Arrays.asList方法. public static void main(String[] args) { String[] arr = {"a ...
- maven设置打jar包并引入依赖包
--------------------------------------------------------方法一:将jar包和项目打在一起---------------------------- ...
- elasticsearch批量索引数据示例
示例数据文件document.json(index表示在索引中增加或替换现有文档,create表示如果文档不存在则添加文档,delete表示删除文档): { "index": { ...
- vue css动画
.toggle-cart-enter-active, .toggle-cart-leave-active { transition: all .3s ease-out; } .toggle-cart- ...
- 玩转RaspberryPi
step1:烧制树莓派内存卡 可以用[Linux系统烧制]http://www.williamsang.com/archives/1764.html 如果用windows烧制的话,就用Win32 Di ...