题解: 解法1: 单调栈优化 首先发现一个性质就是 如果当前从i转移比从j转移更加优秀 那么之后就不会从j转移 所以我们考虑利用这个性质 我们要维护一个队列保证前一个超过后一个的时间单调不减 怎么来维护呢 我们计算s[t-2]超过s[t-1]的时间t1,s[t-1]超过i的时间t2,如果t1<t2就说明了s[t-1]没有用了 另外再更新的时候我们算一下相邻两个哪个比较有用,要是前面哪个就弹栈 解法2: f[i]=max(f[j−1]+a[j]×(s[i]−s[j]+1)^2) 我们先尝试一下一般…
题意 题目链接 Sol 结论:每次选择的区间一定满足首位元素相同.. 仔细想想其实挺显然的,如果不相同可以删掉多着的元素,对答案的贡献是相同的 那么设\(f[i]\)表示到第\(i\)个位置的最大价值,\(s[i]\)表示到\(i\)位置,\(a[i]\)的出现次数,转移方程为 \[f[i] = max(f_{j - 1} + a[i] * (s[i] - s[j] +1)^2)\] 满足\(a[i] = a[j]\) 看起来好像是可以斜率优化的样子,不过存在另外一种解释.. 具体看这里吧 感觉…
决策单调性优化dp 专题练习 优化方法总结 一.斜率优化 对于形如 \(dp[i]=dp[j]+(i-j)*(i-j)\)类型的转移方程,维护一个上凸包或者下凸包,找到切点快速求解 技法: 1.单调队列 : 在保证插入和查询的x坐标均具有单调性时可以使用 2.单调栈+二分:保证插入有单调性,不保证查询有单调性 3.分治+ 1 或 2:在每次分治时将\([l,mid]\)这段区间排序后插入,然后更新右区间\([mid+1,r]\)的答案 二.分治.单调队列维护有单调性的转移 (甚至还有分治套分治)…
遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序列a1,a2,...,an. 对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p - sqrt(abs(i-j)) 数据范围 洛咕上也没给,我能怎么办啊 非正解做法一:暴力 应该都会吧,\(O(n^2)\)枚举.洛谷上貌似40pts. 非正解做法二:…
题意: 给定一个序列,你要将其分为k段,总的代价为每段的权值之和,求最小代价. 定义一段序列的权值为$\sum_{i = 1}^{n}{\binom{cnt_{i}}{2}}$,其中$cnt_{i}$表示当前这段序列中数字大小为i的数的个数. 题解: 先考虑暴力DP, f[i][j]表示DP到i位,分为j段的最小代价. 则$f[i][j] = min(f[l - 1][j] + sum[l][i])$,其中sum[l][i]表示区间[l, i]分成一段的代价. 然后可以发现,这是具有决策单调性的…
传送门 决策单调性优化dp板子题. 感觉队列的写法比栈好写. 所谓决策单调性优化就是每次状态转移的决策都是在向前单调递增的. 所以我们用一个记录三元组(l,r,id)(l,r,id)(l,r,id)的队列来维护,表示在(l,r)(l,r)(l,r)这个区间当前的决策都是ididid,然后在每次求决策点的时候弹一下队头,求出当前解之后我们更新一下队尾就行了. 代码: #include<bits/stdc++.h> #define N 100005 #define ld long double u…
第一种方法是决策单调性优化DP. 决策单调性是指,设i>j,若在某个位置x(x>i)上,决策i比决策j优,那么在x以后的位置上i都一定比j优. 根号函数是一个典型的具有决策单调性的函数,由于根号函数斜率递减,所以i决策的贡献的增长速度必定比j快. 于是使用基础的决策单调性优化即可. 注意两个问题,一是DP函数要存实数而不能存整数,因为先取整会丢失在后面的判断中需要的信息.二是记录决策作用区间的时候左端点要实时更新,即下面的p[st].l++,否则在二分时会出现错误. #include<c…
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 Input 6 5 3 2 4 2 4 Sample Output 2 3…
Description 通往贤者之塔的路上,有许多的危机. 我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增, 在[1,n]中,一共有n个节点.我们把编号在[1,n]的叫做正确节点,[n+1,m]的叫做错误节点.一个叶子,如果是正 确节点则为正确叶子,否则称为错误叶子.莎缇拉要帮助昴到达贤者之塔,因此现在面临着存档位置设定的问题. 为了让昴成长为英雄,因此一共只有p次存档的机会,其中1和n必须存档.被莎缇拉设置为要存档的节点称为存档 位置.当…
传送门 一道神奇的dp题. 这题的决策单调性优化跟普通的不同. 首先发现这道题只跟r−lr-lr−l有关. 然后定义状态f[i][j]f[i][j]f[i][j]表示猜范围为[L,L+i−1][L,L+i-1][L,L+i−1]的数有jjj次报警机会所需的最小代价. 那么有: f[i][j]=minf[i][j]=minf[i][j]=min{max(f[k][j],f[i−k][j−1]+1)max(f[k][j],f[i-k][j-1]+1)max(f[k][j],f[i−k][j−1]+1…