luogu P3592 [POI2015]MYJ】的更多相关文章

题目链接 luogu P3592 [POI2015]MYJ 题解 区间dp 设f[l][r][k]表示区间l到r内最小值>=k的最大收益 枚举为k的位置p,那么包含p的区间答案全部是k 设h[i][j]表示 当前区间穿过i,且c>=j的区间数量,对i的. 然后我们可以做差分,扫一遍,递推出来 \(f[l][r][k]=max(max(f[l][p][k]+f[p+1][r][k]+h[p][k]×k,p∈[l,r]),f[l][r][k+1])\) 对于c离散化 输出方案吼啊 代码 /* 区间…
P3592 [POI2015]MYJ 一道比较烦的区间dp.. 昨天上课讲到了这题,然后就在lg翻到了 然后调了很久很久..... 设\(f[l][r][k]\)为区间\([l,r]\)中,最小值\(\geq k\)的最大收益(只算被\([l,r]\)包含的) 然后枚举最小值的位置\(p\),那么包含\(p\)的区间答案全部是\(k\)了,只需要算两边的 然后发现很多东西不好算...比如说包含\(p\)的区间,所以设\(h[i][j]\)为当前区间穿过\(i\),且\(c>=j\)的区间数量,到…
题意 给定\(m\)个区间\([a_i,b_i]\)以及\(c_i\),对于一个含有\(n\)个元素的序列\(ans[]\),区间\(i\)对其的贡献为\(\min\{ans_i\}(i\in[a_i,b_i])<=c_i\ ?\ \min\{ans_i\}(i\in[a_i,b_i])\ :\ 0\),要求构造一个序列\(ans[]\),最大化区间的贡献之和. \(n\leq50,m\leq4000\) 思路 离散化+区间\(\texttt{DP}\) 打死都不可能想到状态设计DP系列 稍作分…
题目链接: (bzoj) https://www.lydsy.com/JudgeOnline/problem.php?id=4386 (luogu) https://www.luogu.org/problemnew/show/P3597 为啥这种题我都不会了啊 题解: 首先如果边权全都为\(1\), 那么就新建一个计数器,每个点连计数器,计数器连个自环.然后邻接矩阵快速幂倍增即可 如果边权有\(2\)和\(3\), 就分别新建一个节点连向出点 细节不少,特别是判断是否大于\(k\)的时候不能爆l…
Solution 我又双叒叕去看题解啦$QAQ$, 真的想不到鸭 输入 $a$ 和 $n$ 互质, 所以满足 $a \times i \ mod \ n$ $(0<=i<n)$ 肯定是不重复的 根据这一个性质 , 设 满足条件的子串的开头位置为 $s$ 先不考虑$01$, 仅考虑开头位置上的值 $a*s+b$, 设它为$x$, 则它接下来第 $i$ 位的值为 $x+(i-1)*a$ 若那个位置上的字符为 $0$, 则 $0<=x+(i-1)*a<p$, 反之 $p<=x+(i…
简单题. 考虑没有修改数字的条件的限制,我们直接用双指针扫描就可以计算出答案了. 然后考虑加入修改数字的条件,只要用单调队列维护出当前两个指针表示的区间中长度为$d$的一段区间的最大值,用总和减掉这个最大值更新答案即可. 时间复杂度$O(n)$. Code: #include <cstdio> #include <cstring> using namespace std; typedef long long ll; ; int n, d, q[N]; ll lim, a[N], s…
考虑离散化后开权值线段树. 设序列中不小于$s$的数有$cnt$个,小于$s$的数的和为$sum$. 那么操作Z能成功的充要条件是$sum \geq (c - cnt) * s$. 如果序列中不小于$s$的数超过了$c$个,那么直接每一次都选这些数就好了. 如果没有超过$c$个的话,这$cnt$个数每一次都要选,然后再贪心地取剩下的数中最大的就行了. 需要把询问中出现的$a, s$和$0$一起离散化. 细节没想清楚WA好久 膜Claris Code: #include <cstdio> #in…
写在前面 记录最近刷的DP题 以及 打死都不可能想到状态设计DP系列 汇总 洛谷 P6082 [JSOI2015]salesman 树形\(\texttt{DP}\) + 优先队列 比较容易看出来这是一道树形\(\texttt{DP}\)题 要注意的是最大停留次数为输入次数-1,因为还要从子树返回到这一个节点 然后下面考虑怎么\(\texttt{DP}\) 我们用\(f[i]\)表示以从\(i\)出发,访问以\(i\)为根的子树,并且最后能回到\(i\)的最大收益 显然我们要选较大且非负的数,因…
P2577 [ZJOI2004]午餐 $\texttt{solution}$ 想到贪心: 吃饭慢的先打饭节约时间, 所以先将人按吃饭时间从大到小排序. 状态: \(f[i][j]\) 表示前 \(i\) 个人,在 \(1号\) 窗口打饭总时间 \(j\) ,最早吃完饭的时间. 我们可以发现 \(j+k\) 等于前 \(i\) 个人打饭总和( \(sum[i]\) ),\(k = sum(i)-j\) ,所以可以省去一维. 转移: 将第 \(i\) 个人放在 \(1\) 号窗口:(前提:\(j \…
题目大意 一道码量直逼猪国杀的图论+数据结构题.我猪国杀也就一百来行 首先我们要看懂鬼畜的题意,发现其实就是在一个带权有向图上,每条边有一个字符串信息.让你找一个点出发到其它点的最短路径.听起来很简单,手速码完Dijkstra 然而这题中除了路径上的边权和还要加上去的就是一条路径上所有边代表的字符串的LCP,还有一点就是所有的字符串都是一棵字典树上的路径. 问题有点复杂啊,那我们慢慢分析. 化边为点 考虑到如果我们在跑最短路的时候记录每个点过来的状态就会不可避免的扩出\(O(n^2)\)条边,直…