[BZOJ2216]Lightning Conductor
原来决策单调性指的是这个东西...
一些DP可以写成$f_i=\max\limits_{j\lt i}g(i,j)$,设$p_i(p_i<j)$表示使得$g(i,j)$最大的$j$,如果$p_1\leq\cdots\leq p_n$,那么我们称这个DP满足决策单调性,称$p_i$为$i$的最优决策点
决策单调性可以用整体二分来做,设当前要处理$f_{l\cdots r}$且最优决策点的范围是$[h,t]$,那么我们先求出$f_{mid}$,这个直接暴力从$\left[h,\min(mid,t)\right]$转移即可,假设$mid$的最优决策点是$d$,那么我们可以递归做$(l,mid-1,h,d)$和$(mid+1,r,d,t)$,二分总共$O(\log_2n)$层,每一层最多$O(n)$,总时间复杂度$O\left(n\log_2n\right)$
这题的DP方程是$f_i=\max\{a_j+\sqrt{\left|i-j\right|}\}-a_i$,为了把绝对值去掉,我们作限制$j\lt i$,正反各做一遍取最大值即可
$f_i=\max\limits_{j\lt i}\{a_j+\sqrt{i-j}\}-a_i$
设$i$的最优决策点为$p$,那么对于$\forall k\lt p$有$a_k+\sqrt{i-k}\leq a_p+\sqrt{i-p}$
因为$\sqrt{x+1}-\sqrt x$是单调递减的,所以$\sqrt{i+1-k}-\sqrt{i-k}\leq\sqrt{i+1-p}-\sqrt{i-p}$
把它加到上面,我们得到$a_k+\sqrt{i+1-k}\leq a_p+\sqrt{i+1-p}$
这也就说明了$i+1$的最优决策点$\geq p$,也就是说这个DP满足决策单调性
#include<stdio.h>
#include<math.h>
typedef double du;
du max(du a,du b){return ceil(a>b?a:b);}
void swap(int&a,int&b){
int c=a;
a=b;
b=c;
}
int a[500010];
void solve(du*f,int l,int r,int h,int t){
if(l>r||h>t)return;
int mid,i,d;
du res=-2147483647.;
mid=(l+r)>>1;
for(i=h;i<=t&&i<=mid;i++){
if(a[i]+sqrt(mid-i)>res){
res=a[i]+sqrt(mid-i);
d=i;
}
}
f[mid]=res-a[mid];
solve(f,l,mid-1,h,d);
solve(f,mid+1,r,d,t);
}
du f[500010],g[500010];
int main(){
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d",a+i);
solve(f,1,n,1,n);
for(i=1;i<=n>>1;i++)swap(a[i],a[n-i+1]);
solve(g,1,n,1,n);
for(i=1;i<=n;i++)printf("%.0lf\n",max(f[i],g[n-i+1]));
}
[BZOJ2216]Lightning Conductor的更多相关文章
- 【BZOJ2216】Lightning Conductor(动态规划)
[BZOJ2216]Lightning Conductor(动态规划) 题面 BZOJ,然而是权限题 洛谷 题解 \(\sqrt {|i-j|}\)似乎没什么意义,只需要从前往后做一次再从后往前做一次 ...
- 【BZOJ2216】[Poi2011]Lightning Conductor 决策单调性
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负 ...
- [bzoj 2216] [Poi2011] Lightning Conductor
[bzoj 2216] [Poi2011] Lightning Conductor Description 已知一个长度为n的序列a1,a2,-,an. 对于每个1<=i<=n,找到最小的 ...
- P3515 [POI2011]Lightning Conductor(决策单调性分治)
P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下 ...
- BZOJ2216 [Poi2011]Lightning Conductor 【决策单调性dp】
题目链接 BZOJ2216 题解 学过高中数学都应知道,我们要求\(p\)的极值,参变分离为 \[h_j + sqrt{|i - j|} - h_i \le p\] 实际上就是求\(h_j + sqr ...
- BZOJ2216 : [Poi2011]Lightning Conductor
$f[i]=\max(a[j]+\lceil\sqrt{|i-j|}\rceil)$, 拆开绝对值,考虑j<i,则决策具有单调性,j>i同理, 所以可以用分治$O(n\log n)$解决. ...
- BZOJ2216 Poi2011 Lightning Conductor 【决策单调性优化DP】
Description 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt( ...
- bzoj2216: [Poi2011]Lightning Conductor(分治决策单调性优化)
每个pi要求 这个只需要正反DP(?)一次就行了,可以发现这个是有决策单调性的,用分治优化 #include<iostream> #include<cstring> #incl ...
- BZOJ2216: [Poi2011]Lightning Conductor(DP 决策单调性)
题意 题目链接 Sol 很nice的决策单调性题目 首先把给出的式子移项,我们要求的$P_i = max(a_j + \sqrt{|i - j|}) - a_i$. 按套路把绝对值拆掉,$p_i = ...
随机推荐
- Spring Session加Redis(山东数漫江湖)
session是一个非常常见的概念.session的作用是为了辅助http协议,因为http是本身是一个无状态协议.为了记录用户的状态,session机制就应运而生了.同时session也是一个非常老 ...
- HH实习 acm算法部 1689
题目描述 这学期到了十五周了,HH突然要去实训中心实习了,想到要拿着钳子,锯子什么的,头就有点大了,因为它挺好玩的,但是,也是很累的,看着学弟坐在机房悠闲地敲着代码,HH学长决定要让他们好好忙忙,这道 ...
- this的九种常用场景(转子jb51.net)
[场景1]全局环境中的this指向全局对象 ; alert(a); b = ; alert( ; [场景2]对象内部函数的this指向调用函数的当前对象 ; var bar = { a: , test ...
- Python中的异常处理 -- (转)
python中的异常 异常是指程序中的例外,违例情况.异常机制是指程序出现错误后,程序的处理方法.当出现错误后,程序的执行流程发生改变,程序的控制权转移到异常处理. Exception类是常用的异 ...
- 集合类---set
定义:一个不包含重复元素的collection.set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素,不保证集合里元素的顺序. 方法使用详解: 1 ...
- Oracle 集合
--合并(UNION.UNION ALL) select * from empwhere ename like '%A%'unionselect * from empwhere ename like ...
- C++——初识C++
1. C关键字 auto int double long char float short signed unsigned struct union enum static switch case d ...
- JDBC数据源连接池(1)---DBCP
何为数据源呢?也就是数据的来源.我在前面的一篇文章<JDBC原生数据库连接>中,采用了mysql数据库,数据来源于mysql,那么mysql就是一种数据源.在实际工作中,除了mysql,往 ...
- linux命令(47):rmdir命令
1.命令格式: rmdir [选项]... 目录... 2.命令功能: 该命令从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限. 3.命令参数: - p 递归删除目录dirn ...
- linux命令(31):lsof命令
1.递归查看某个目录的文件信息: lsof test/test1 2.不使用+D选项,遍历查看某个目录的所有文件信息的方法 :lsof |grep 'test/test3' 3.列出某个用户打开的文 ...