3437: 小P的牧场

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 947  Solved: 542
[Submit][Status][Discuss]

Description

背景

小P是个特么喜欢玩MC的孩纸。。。

描述

小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站,每个牧场上只能建立一个控制站,每个控制站控制的牧场是它所在的牧场一直到它西边第一个控制站的所有牧场(它西边第一个控制站所在的牧场不被控制)(如果它西边不存在控制站,那么它控制西边所有的牧场),每个牧场被控制都需要一定的花费(毕竟在控制站到牧场间修建道路是需要资源的嘛~),而且该花费等于它到控制它的控制站之间的牧场数目(不包括自身,但包括控制站所在牧场)乘上该牧场的放养量,在第i个牧场建立控制站的花费是ai,每个牧场i的放养量是bi,理所当然,小P需要总花费最小,但是小P的智商有点不够用了,所以这个最小总花费就由你来算出啦。

Input

第一行一个整数 n 表示牧场数目

第二行包括n个整数,第i个整数表示ai

第三行包括n个整数,第i个整数表示bi

Output

只有一行,包括一个整数,表示最小花费

Sample Input

4
2424
3142

Sample Output

9
 
 
 
【题解】
 
f[i]表示前i个牧场被控制的最小代价,sumb表示b数组的前缀和,sumkb表示 b[i]*i 的前缀和
 
则状态转移方程:f[i]=min{f[j]+a[i]+i*(sumb[i]-sumb[j])-(sumkb[i]-sumkb[j])}  (1<=j<i)
 
设j<k,且从k转移到i比j更优。
 
得斜率表达式:[(f[j]-sumkb[j])-(f[k]-sumkb[k])]/(sumb[j]-sumb[k])>i
 
 #include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define FILE "read"
#define MAXN 1000100
#define up(i,j,n) for(ll i=j;i<=n;i++)
namespace INIT{
char buf[<<],*fs,*ft;
inline char getc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,,<<,stdin),fs==ft))?:*fs++;}
inline ll read(){
ll x=,f=; char ch=getc();
while(!isdigit(ch)) {if(ch=='-') f=-; ch=getc();}
while(isdigit(ch)) {x=x*+ch-''; ch=getc();}
return x*f;
}
}using namespace INIT;
ll n,head,tail,a[MAXN],b[MAXN],sumb[MAXN],sumkb[MAXN],q[MAXN],f[MAXN];
void init(){
n=read();
up(i,,n) a[i]=read();
up(i,,n) b[i]=read(),sumb[i]=sumb[i-]+b[i],sumkb[i]=sumkb[i-]+b[i]*i;
}
inline double slop(ll j,ll k) {return (double)((f[j]+sumkb[j])-(f[k]+sumkb[k]))/(double)(sumb[j]-sumb[k]);}
void solve(){
up(i,,n){
while(head<tail&&slop(q[head],q[head+])<i) head++;
ll t=q[head];
f[i]=f[t]+a[i]+i*(sumb[i]-sumb[t])-(sumkb[i]-sumkb[t]);
while(head<tail&&slop(q[tail-],q[tail])>slop(q[tail],i)) tail--;
q[++tail]=i;
}
printf("%lld\n",f[n]);
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
init();
solve();
return ;
}
 
 

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

  1. bzoj3437小P的牧场

    bzoj3437小P的牧场 题意: n个牧场,在每个牧场见控制站的花费为ai,在该处建控制站能控制从此处到左边第一个控制站(或边界)之间的牧场.一个牧场被控制的花费等于它到控制它的控制站之间的牧场数目 ...

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

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

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

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

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

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

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

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

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

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

  7. bzoj3437 小P的牧场

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

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

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

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

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

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

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

随机推荐

  1. 201621123005《Java程序设计》第十二次作业

    <Java程序设计>第十二次作业 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造 ...

  2. day02Java基础学习笔记

    自动类型转换:容量小的类型自动转换为容量大的数据类型.数据类型按容量大小排序为: byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型 1.各种进制的表现形式和特点 二 ...

  3. Scrum立会报告+燃尽图(3)选题

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2193 一.小组介绍 组长:刘莹莹 组员:朱珅莹 孙韦男 祝玮琦 王玉潘 ...

  4. openResty缓存前移(到达nginx端)

    一.openResty的理解 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高 ...

  5. grub2 详解

    grub2详解(翻译和整理官方手册)   分类: Linux 基础篇,Linux 杂项   本文原创地址在博客园:https://www.cnblogs.com/f-ck-need-u/archive ...

  6. react拖拽(表格拖拽排序、普通拖拽排序以及树形拖拽排序)

    表格拖拽排序:组件地址:https://reactabular.js.org/#/drag-and-drop 拖动的排序是用React-DnD:React-DnD:http://react-dnd.g ...

  7. npm 与 package.json 快速入门

    npm 是前端开发广泛使用的包管理工具,之前使用 Weex 时看了阮一峰前辈的文章了解了一些,这次结合官方文章总结一下,加深下理解吧! 读完本文你将了解: 什么是 npm 安装 npm 更新 npm ...

  8. 从开发者的角度分析iOS应如何省电

    从开发者的角度分析iOS应如何省电 说明 网上关于iPhone如何省电的文章很多.但是基本没有讲原理.而在生活中,很多人在使用iPhone中有着明显的错误的省电习惯. 本文从iOS开发者的角度,对iO ...

  9. 【C++基础】sort函数

    sort函数的时间复杂度为O(n*logn),排序方法类似于快排. # 头文件 #include<algorithm> using namespace std; # 参数 第一个参数:要排 ...

  10. 《DSP using MATLAB》Problem 2.10

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...