- 下午被抓去上文化课了(
- DMY DAY8 T2
- 参考并理解了 dyh 的思路链,整理了一个看起来更自然的
- 首先可以发现这个是很像区间 DP 形式的
- 所以率先能想到的就是 \(dp_{l,r,k}\) 表示 \(l-r\) 的区间内还剩下的和 \(S \equiv k (\mod d)\) 的可获得的最大分数如果不合法的话则为负无穷
- 我们会发现这个毫无前途,无法优化,我们发现假如把删去的数在原序列中看成一个黑点,则一定是一个黑色的段加一个白色的段加一个黑色的段如此形成的
- 所以我们可以考虑 \(f_{l,r}\) 表示若 \(l-r\) 这一段能删去的最大分数是多少,然后我们考虑如何求出这个
- 带给我们的启发是当一个问题无法解决的时候我们可以采用分布解决的方法
- 考虑如何求出 \(f_{l,r}\)
- 考虑一个 \(l-r\) 的和为 \(S\) 若能删去这段区间,则要求出最小的 \(k\) 使得 \(S \equiv k\cdot r (\mod d)\) 然后获得的分数即为 \(\frac{S - k\cdotr}{d}\)
- 会发现若一个区间可以被操作的最大次数 $d >= $ 它的最小的 \(k\) 则它能被删掉我们也能求出它能获得的最大分数
- 故我们定义 \(dp_{l,r}\) 表示 \([l,r]\) 最大的能被操作的次数
- 然后我们枚举 \(mid\) 则 \(dp_{l,r} = max(dp_{l,mid} + dp_{mid+1,r} + T)\) 若 \(S\) 减去这么多 \(r\) 的话的余数还是 \(r\) 则 T=1否则等于0
- 这样我们就把这道题 分步 解决了
- 然后我把两个数组分开算常数翻倍然后T了一个小时/fn
- 第26场MX模拟赛,纯难吧,最高分205这是人类啊,这是人类啊。。。
- 题目难度有时不会按照顺序放/fn
- T1(位置T3)
- 考虑 \(f_i\) 为答案则能写出转移式 \(f_i = \frac{f_{i+1} + \sum_{1<=j<=m,a_j<=i} f_{i-a_j} + b_j}{1 + \sum_{1<=j<=m,a_j<=i}}\) 然后我们可以把
- 考虑把 \(f_{i+1}\) 拎出来然后用 \(N^2\) 的时间把每个 \(f_i\) 化成 \(a \cdot f_0 + b\) 的形式,带入 \(f_n = 0\) 即可算出来了
- T2(位置T1)
- 考虑一条链上的情况, \(a-b-z\) 这样分布的时候我们考虑 \(a\) 的速度是稳定的故我们考虑维护 \(b\) 比 \(a\) 领先的距离 \(d\),考虑 \(a\) 能追上 \(b\) 的充要条件是存在 \(d<=0\) 考虑 \(b\) 走过一条边的参数是 \((u,v)\) 则 \(d=d+u-v\) 我们可以使用 \(f_{i,j} = (x,y)\) 表示 \(i\) 向上走 \(2^j\) 步假如到 \(i\) 的时候 \(b\) 领先 \(a\) 为 \(d\),则过程中 \(d\) 的最小值为 \(d+x\),\(d\) 最后会变为 \(d+y\)
- 这是链上的情况,其他情况其实也一样只是让 \(a,b\) 先走一段路就行了
- 想到维护 \(d\) 直接就上树链剖分套线段树了,我意识到了这可能不是正解而且以我的码力大概率也无法调处它,压根没想到这是一个可以用倍增维护的东西,换个角度而言这是根基不牢,对普通算法掌握不牢固,对高级算法半吊子水,思维不够深入,套路见的也不够多
- 后面两个是人类题吗/jk
- DMY DAY 9 T2
- 首先关于 \(max(a_i - a_j, b_i - b_j, c_i - c_j)\) 可以考虑对称性可以化为 \(\frac{\max(a_i-a_j,b_i-b_j,c_i-c_j)-\min(a_i-a_j,b_i-b_j,c_i-c_j)}{2}\)
- 考虑 \(max(a,b,c) - min(a,b,c) = a + b + c - min(a,b) - min(b,c) - min(a,c)\)
- 然后就很好求了拿 \(-min(a,b)\) 来说
- 如钦定 \(a_i - a_j >= b_i - b_j\) 则 \(a_i - b_i >= a_j - b_j\) 桶排计数即可
- DMY DAY 8 T3
- 认可DMY的模拟赛了,都是好题都很巧妙
- 首先按照贪心的角度而言如果你要保护一个点 \(u\) 则你肯定是希望在保护到 \(u\) 的同时保护到更多的点,我们可以考虑设 \(S_x\) 为能保护到 \(x\) 的点集,如果 \(u\) 与 \(v\) 的 \(S\) 相交则一定是它们路径的中点以及除 \(u\) 与 \(v\) 这两棵子树外的子树。
- 考虑随便拎一个点当根,我们考虑当要保护 \(u\) 的时候肯定是选取 \(S_u\) 中最高的点(深度最小)的点的,可以分类讨论证明
- 然后初步的做法则是从深度最大的特殊点开始,若没有被覆盖则选取 \(S_u\) 中最高的点 \(x\) 再标记 \(x\) 能覆盖的所有点
- 最妙的一步在于维护 \(dis_x\) 表示离 \(x\) 最近的特殊点到 \(x\) 的距离我们可以让 \(x\) 向 \(dis_v + 1 = dis_x\) 的点连一条有向边,当我们选取 \(x\) 的时候则顺着有向边去标记,有了标记的则直接退出
- 发现这是 O(N) 量级的算法
- 然后我们维护 \(dis_x\) 的时候顺道把 \(S_u\) 的 \(x\) 也求了故此题结束
- 很妙啊,感觉有点无法分析自己没想出来的原因了,题目分析不够细致?思维不够强?我觉得主要是这两个原因
posted @
2025-11-20 22:42
睡神本神
阅读(
2)
评论()
收藏
举报