每个pi要求 这个只需要正反DP(?)一次就行了,可以发现这个是有决策单调性的,用分治优化 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; ,inf=1e9; int n; ]; void read(int &k) {…
P3515 [POI2011]Lightning Conductor 式子可转化为:$p>=a_j-a_i+sqrt(i-j) (j<i)$ $j>i$的情况,把上式翻转即可得到 下面给一张图证明这是满足决策单调性的 把$a_j+sqrt(i-j)$表示在坐标系上 显然$sqrt(i-j)$的增长速度趋缓 曲线$a$被曲线$b$超过后是无法翻身的 对两个方向进行决策单调性分治,取$max$即可 #include<iostream> #include<cstdio>…
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 \[p_i\ge a_j-a_i+\sqrt{|i-j|}\] \[p_i=\max\limits_{j=1}^n\{a_j+\sqrt{|i-j|}\}-a_i\] 绝对值看着很不爽,我们把它拆开 \[p_i=\max(\max_{j=1}^i\{a_j+\sqrt{i-j}\},\max_{j…
题意 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) 题解 决策单调性是个好东西 等学会了再滚回来填坑 //minamoto #include<iostream> #include<cstdio> #include<cmath> using namespace std; #define getc() (p1==p2&…
给定一序列,求对于每一个$a_i$的最小非负整数$p_i$,使得$\forall j \neq i $有$ p_i>=a_j-a_i+ \sqrt{|i-j|}$. 绝对值很烦 ,先分左右情况单独做.现在假设j都在i左边,则$ p_{i} = max \{ a_{j}-a_{i}+ \sqrt{i-j} \} = max \{ a_{j}+ \sqrt{i-j} \} - a_i$.带根号,不易斜率优化,考虑证决策单调性. 假设最优决策为j,j之前的任意决策称之为$j'$,只与$j$有关的项令之…
首先进行一步转化 $a_j \leq a_i + q - sqrt(abs(i - j))$ $a_i + q \geq a_j + sqrt(abs(i-j))$ 即 $q = max (a_j + sqrt(abs(i-j))) - a_i $ 我们对$i \geq j 和 j > i$ 分类讨论, 其实解决一种情况后将序列翻转再做一遍即可 有一种O($n^2$)的dp暴力应该不难想到 那么我们现在思考如何以比较优秀的时间复杂度解决 这里涉及到决策单调性 简单的说, 对于i来说, 它的答案来…
正题 题目链接:https://www.luogu.com.cn/problem/P3507 题目大意 \(n\)个数字的一个序列\(a\),对于每个位置\(i\)求一个\(p_i\)使得对于任意\(j\)满足 \[p_i+a_i-\sqrt{|i-j|}\geq p_j \] 解题思路 化简一下发现我们是需要求出\(max\{\sqrt{|i-j|}+p_j\}\) 分成两次去掉绝对值. 因为这个根号的性质是增长的越来越小,那么对于一个位置\(i\)若它的\(max\)值位置为\(j\),那么…
[BZOJ2216][Poi2011]Lightning Conductor Description 已知一个长度为n的序列a1,a2,...,an.对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) Input 第一行n,(1<=n<=500000)下面每行一个整数,其中第i行是ai.(0<=ai<=1000000000) Output n行,第i行表示对于i,得到的p Sample I…
[bzoj 2216] [Poi2011] Lightning Conductor Description 已知一个长度为n的序列a1,a2,-,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs(i-j)) Input 第一行n,(1<=n<=500000) 下面每行一个整数,其中第i行是ai.(0<=ai<=1000000000) Output n行,第i行表示对于i,得到的p Sampl…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2216 那个关于位置的代价是带根号的,所以随着距离的增加而增长变慢:所以靠后的位置一旦比靠前的位置优,就会一直更优(因为距离相同地增长,基数大的增长慢),所以有决策单调性. 一开始写了和 bzoj 4709 一样的实现,就是使得队列里相邻两个位置的 “后一个位置优于前一个位置的时间” 是单调递增的.但是却 TLE .不知道为什么. #include<cstdio> #include<…