【BZOJ】3437: 小P的牧场
题意
n个点,需要再一些点建立控制站,如果在第\(i\)个建站,贡献为\(a[i]\)。假设前一个站为\(j<i\),则\([j+1, i]\)的点的贡献是\(\sum_{k=j+1}^{i} (i-k) b[k]\)。同时要求第\(n\)个点建站。求最小贡献。(\(n \le 10^6\))
题解
设\(d(i)\)表示前\(i\)个且在第\(i\)个牧场建控制站的最小贡献
则
\]
则\(ans = d(n)\)
设\(cost(i, j)\)表示\([i, j]\)由\(j\)控制的费用
$$
\begin{align}
cost(i, j) & = \sum_{k=i}^{j} (j-k)b[k] \\
& = j \sum_{k=i}^{j} b[k] - \sum_{k=i}^{j} kb[k] \\
\end{align}
$$
令
\(s_0(n) = \sum_{i=1}^{n} b[i]\)
\(s_1(n) = \sum_{i=1}^{n} ib[i]\)
则
\]
则
$$
\begin{align}
d(i) & = min( d(j) + i(s_0(i) - s_0(j)) - s_1(i) + s_1(j) ) \\
& = min( d(j) + s_1(j) - is_0(j) ) + is_0(i) - s_1(i) + a[i] \\
\end{align}
$$
设决策\(j\)比\(k\)优且\(s_0(j) \le s_0(k)\)
$$
\begin{align}
d(j) + s_1(j) - i s_0(j) & \le d(k) + s_1(k) - i s_0(k) \\
d(j) + s_1(j) - ( d(k) + s_1(k) ) & \le i (s_0(j) - s_0(k)) \\
\frac{d(j) + s_1(j) - ( d(k) + s_1(k) )}{ s_0(j) - s_0(k)} & \ge i \\
\end{align}
$$
由于\(i\)递增,\(s_0(i)\)随\(i\)递增而递增,因此我们用单调队列优化
#include <bits/stdc++.h>
using namespace std;
const int N=1000005;
typedef long long ll;
int a[N], q[N];
ll s0[N], s1[N], d[N];
inline ll Y(int j, int k) {
return d[j]+s1[j]-d[k]-s1[k];
}
inline ll X(int j, int k) {
return (ll)s0[j]-s0[k];
}
int main() {
int n;
scanf("%d", &n);
for(int i=1; i<=n; ++i) {
scanf("%d", &a[i]);
}
for(int i=1; i<=n; ++i) {
scanf("%lld", &s0[i]);
s1[i]=s0[i]*i;
s0[i]+=s0[i-1];
s1[i]+=s1[i-1];
}
int fr=0, ta=1;
q[0]=0;
for(int i=1; i<=n; ++i) {
while(ta-fr>=2 && Y(q[fr], q[fr+1])>(ll)i*X(q[fr], q[fr+1])) {
++fr;
}
int j=q[fr];
d[i]=d[j]+s1[j]-s0[j]*i+s0[i]*i-s1[i]+a[i];
while(ta-fr>=2 && Y(q[ta-2], i)*X(q[ta-2], q[ta-1])<=Y(q[ta-2], q[ta-1])*X(q[ta-2], i)) {
--ta;
}
q[ta++]=i;
}
printf("%lld\n", d[n]);
return 0;
}
【BZOJ】3437: 小P的牧场的更多相关文章
- 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编号), ...
- BZOJ 3437 小P的牧场(斜率优化DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3437 [题目大意] n个牧场排成一行,需要在某些牧场上面建立控制站, 每个牧场上只能建 ...
- BZOJ 3437: 小P的牧场
传送门 显然考虑 $dp$,设 $f[i]$ 表示前 $i$ 个牧场都被控制的最小代价 那么枚举所有 $j<i$ ,$f[i]=f[j]+val[i][j]+A[i]$ $val[i][j]$ ...
- bzoj 3437: 小P的牧场【斜率优化】
emmm妹想到要倒着推 先假设只在n建一个控制站,这样的费用是\( \sum_{i=1}^{n} b[i]*(n-i) \)的 然后设f[i]为在i到n键控制站,并且i一定建一个,能最多节省下的费用, ...
- bzoj 3437 小p的农场
bzoj 3437 小p的农场 思路 \(f[i]=min(f[j]+\sum\limits_{k=j+1}^{i}{b[k]*(i-k)}+a[i])\) \(f[i]=min(f[j]+\sum\ ...
- 3437: 小P的牧场
3437: 小P的牧场 思路 斜率优化. dp[i]表示到第i个点(第i个点按控制台)的最小代价. 代码 #include<cstdio> #include<iostream> ...
- 【BZOJ】【3437】小P的牧场
DP/斜率优化 斜率优化基本题……等等,好像就没啥变化啊= = 嗯目测这题跟仓库建设差不多?写题的时候倒是没想这么多……直接推了公式. $$f[i]=min\{f[j]+cal(j,i)+a[i]\} ...
- 【BZOJ-3437】小P的牧场 DP + 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 705 Solved: 404[Submit][Status][Discuss ...
随机推荐
- Codeforces #261 D
Codeforces #261 D D. Pashmak and Parmida's problem time limit per test 3 seconds memory limit per te ...
- lib库dll库的使用方法与关系
一.lib库 lib库有两种:一种是静态lib(static Lib),也就是最常见的lib库,在编译时直接将代码加入程序当中.静态lib中,一个lib文件实际上是任意个obj文件的集合,obj文件是 ...
- .htaccess 基础教程(三)RewriteCond标志符,RewriteRule适用的标志符
1.利用 .htaccess 防止盗链 如果不喜欢别人在他们的网页上链接自己的图片.文档的话,也可以通过htaccess的指令来做到.当然这样也可以对你的网站服务器压力变小! 这次先给出‘代码’,然后 ...
- sql语句修改列
1.修改列名的常用语句 exec sp_rename '[dbo].[Table_1].[birthday]','birth' --将表中列名为birthday改为birdh 属性不变,用的是数据库 ...
- .net WebServer例
新建.asmx页面 using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
- 去除ios系统a标签点击时的灰色背景
使用图片作为a标签的点击按钮时,当触发touchstart的时候,往往会有一个灰色的背景,想要去掉的话可以用下面这种方式 a,a:hover,a:active,a:visited,a:link,a:f ...
- url和urn和uri
1.需求 理清三者的关系 2.例子 3.说明 url是资源的位置(包含scheme),urn表示资源的名字.url是唯一的.urn不是. 他们2个都是uri的子集 参考资料:https://danie ...
- VBA之文件筛选
在工作中,经常会碰到从一堆腐朽的source中按照一个列表去筛选出来现在还要用的source文件. 这个如果用vba来实现的话,会节省大量的时间,而且不会出错. 前提说明: 将想要复制的文件名列表放在 ...
- WCF service 获取 client 端的 IP 和 port (转)
转帖记录一下,以便日后使用. 主要使用是.NET3.5里的服务端上下文的消息实例的RemoteEndpointMessageProperty属性,获取客户端地址信息.但是限制 的绑定是HTTP.TCP ...
- java10
1:正则表达式(理解) (1)就是符合一定规则的字符串 (2)常见规则 A:字符 x 字符 x.举例:'a'表示字符a \\ 反斜线字符. \n 新行(换行)符 ('\u000A') \r 回车符 ( ...