博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2018.10.23-dtoj-1751小P的牧场(pasture)
阅读量:6644 次
发布时间:2019-06-25

本文共 1653 字,大约阅读时间需要 5 分钟。

题目描述:

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

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

输入:

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

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

输出:

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

数据范围:

对于10%的数据,1 <= n <= 10

对于30%的数据,1 <= n <= 1000
对于100%的数据,1 <= n <= 1000000 , 0 < ai,bi <= 10000

算法标签:斜率优化

思路:

其实是一道比较裸的斜率优化,一开始我为什么sb列了个二维式子,绝对的自己推式子能力爆弱,化对式子就是很明了的斜率优化了。

式子:s[i]前缀和,c[i]=∑a[j]*j ,f[i]=f[j]+(sum[i]-sum[j])*i-c[i]+c[j]+a[i]; (i,j上面是否要加一减一这类的要注意1下下)

以下代码:

#include
#define il inline#define LL long long#define D double#define _(d) while(d(isdigit(ch=getchar())))using namespace std;const int N=1e6+5;int n,a[N],b[N],q[N],l=1,r=1;LL f[N],s[N],c[N];il int read(){
int x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch^48;_()x=(x<<1)+(x<<3)+(ch^48);return f*x;}il LL Y(int a){
return f[a]+c[a];}il LL X(int a){
return s[a];}il D K(int a,int b){
return (D)(Y(b)-Y(a))/(D)(X(b)-X(a));}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++)s[i]=s[i-1]+(LL)b[i],c[i]=c[i-1]+(LL)b[i]*(LL)i; for(int i=1;i<=n;i++){ while(l
<(D)i)l++; int j=q[l]; f[i]=f[j]+(s[i]-s[j])*(LL)i+c[j]-c[i]+(LL)a[i]; while(l<=r&&K(q[r-1],q[r])>K(q[r],i))r--; q[++r]=i; } printf("%lld\n",f[n]); return 0;}
View Code

 

转载于:https://www.cnblogs.com/Jessie-/p/9838845.html

你可能感兴趣的文章
mongodb 使用 robo3T 等工具添加用户之后还是 auth failed 的问题
查看>>
[AGC014D]Black and White Tree
查看>>
陶哲轩实分析习题9.7.2 不动点定理的最简单情形
查看>>
$\sin x_0+\frac{\cos x_0}{1!}(x-x_0)+\cdots +\frac{\sin (x_0+n\frac{\pi}{2})}{n!}(x-x_0)^n+\cdots$
查看>>
C# 获取本机IP地址
查看>>
Debian 7 安装使用 Virtualbox及增强功能
查看>>
ubuntu下脚本基础
查看>>
遍历XML文件添加到TreeView递归调用
查看>>
System.InvalidOperationException: 找到多个与名为“Home”的控制器匹配的类型。
查看>>
web爬虫,requests请求
查看>>
标签的类添加与删除
查看>>
Unity3D 4.3在Windows下打包iOS资源
查看>>
unity编程心得
查看>>
第十篇 javascript基础语法
查看>>
【洛谷团队题目】
查看>>
虚拟机Ubuntu16.04 Server设置NAT方式修改ip
查看>>
zw版【转发·台湾nvp系列Delphi例程】HALCON FastThreshold1
查看>>
深入JVM系列之(3):JavaCore和HeapDump
查看>>
LeetCode: Restore IP Addresses
查看>>
HDU 2504 又见GCD(数论,最大公约数)
查看>>