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一定建一个,能最多节省下的费用, ...
随机推荐
- 理解js中私有变量
私有变量在js中是个什么概念.当下我的认识是var所定义的变量,实际可以理解为属性和方法,或者单单是临时存储器,不归属任何对象. 一个声明函数: function a(){ var v = &quo ...
- 史诗级Java/JavaWeb学习资源免费分享
黑马内部视频+相关配套学习资料 Java Spring 技术栈构建前后台团购网站 Java SSM开发大众点评后端 欢迎关注微信公众号:Java面试通关手册 回复关键词: "资源分享第一波& ...
- 运维开发:python websocket网页实时显示远程服务器日志信息
功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用 ...
- Linux中断(interrupt)子系统之二:arch相关的硬件封装层【转】
转自:http://blog.csdn.net/droidphone/article/details/7467436 Linux的通用中断子系统的一个设计原则就是把底层的硬件实现尽可能地隐藏起来,使得 ...
- [总结]可重用cell的定义方式
1.简介 为了提高tableview中cell的加载速度通常可以使用cell重用的方式来实现,即我们向上拖动cell的时候,上部份消失的cell可以重复的被下部分出现的cell重用. 2.说明 一般c ...
- 下载安装go插件包报错fatal: unable to access 'https://github.com/golang/tools.git/': OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054
使用git命令来给vscode安装go插件的时候报错,如下: $ git clone https://github.com/golang/tools.git tools Cloning into 't ...
- 二、ansible配置简要介绍
[defaults] # some basic default values… hostfile = /etc/ansible/hosts \\指定默认hosts配置的位置 # library_pat ...
- Django Ajax学习一
1. 简单的加法 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 《逐梦旅程 WINDOWS游戏编程之从零开始》笔记4——Direct3D编程基础
第11章 Direct3D编程基础 2D游戏是贴图的艺术,3D游戏是渲染的艺术.这句话在我学过了之前的GDI编程之后,前一句算是有所体会,现在是来理解后一句的时候了. 安装DirectX SDK配置啥 ...
- 三:ZooKeeper的ZAB协议
一:ZAB协议概述--->ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeeper Atomic Broadcast(ZAB,zookeeper原子消息广播协议)的协 ...