Shu-How Zの小窝

Loading...

2025 11 18 + 11 19

11.18

  • 下午和晚上都要被拉去上文化课(
  • dmy DAY5 T2
    • 我们可以把 \(a,b\) 的询问看成一条链上挂着一些子树,通过 \(d_a\)\(d_b\) 的差我们能够求出 \(x\) 的位置,然后我们可以预处理出一个点离它最远的三个点及距离即可,代码难度有点高
  • dmy DAY8 T1
    • 可以把 \(f()\) 操作看成 \(x \oplus y = sum\) 的情况下使得 \(x + y\) 尽可能大,故我们可以逐位考虑,若 \(sum\) 这位上为1则无所谓,如果为0的话要么是两个1要么是两个0,考虑1的情况是否出现,故我们可以得到一个 \(???1??1??\) 的二进制数,考虑它在前面有没有出现,故我们加入 \(a_i\) 的时候就加入 \(sum_i\) 的所有子集标记为出现过即可

11.19

  • P7406 DP,发现性质题目
  • 首先我看出了 \(a_i < a_{i+1}+2\) 可以化为 \(a_i <= a_{i+1}+1\) 我此时也猜到了是若干连续下降的序列拼起来的
  • 然后我稍一推导便发现这是从小到大依次放入的,故设 \(f_i\)\([1,i]\) 都放入序列中了的最小代价,定义 \(g_{l,r}\) 为把 \(l-r\) 放入 \([l,r]\) 这段区间的操作次数
  • \(f_i = \min_{f_j + g_{j+1,i}}\)
  • 问题转化为 \(g_{l,r}\) 该如何求取
    • 可以发现 \([1,l-1]\) 已经归位无需考虑,则我们发现这就是 \(l-r\)\(r+1-n\) 的逆序对个数加上 \(l-r\)\(l-r\) 的顺序对个数这个用二维前缀和维护即可
  • P3188 背包DP,二进制拆位
    • 其实是一道很经典的板子拆位题但是我没做过
    • 考虑 \(a \cdot 2^b(a<=10)\) 可以发现这是一个比较特别的性质,所以能猜到肯定与拆位相关
    • 故我们定义 \(f_{i,j}\) 表示在第 \(i\) 位可以选 \(j\)\(1<<i\) 的最大价值,可以直接转移
    • 如何把第 \(i\) 位与前 \(i-1\) 位拼起来,换句话说如何把 \(i-1\) 位转到第 \(i\) 位上
    • 考虑 \(i\) 位的选数无法对前 \(i-1\) 造成影响,故我们可以考虑 \(w\) 这个东西的前 \(i-1\) 位上的权值尽量选满,故前 \(i-1\) 位转移到第 \(i\) 位即为,定义 \(g_{i,j}\) 表示前 \(i\) 位,在第 \(i\) 位上用了 \(j\)\(1<<j\) 的最大价值
    • g_{i,j} = max(f_{i,p} + g_{i-1,2*(j-p)+(w>>(i-1) & 1)})
    • 转移即可
  • p6554
    • 换根DP板题啊/cg,怎么还是蓝(
  • P5664
    • 首先我想到了容斥,我也想到了要枚举最多的去DP转移,但是!我甚至想到了去维护总数与最大数量级的数量关系,但是我没想到可以维护最大数数量与其他数之和的差!
    • 在类似于最大值不能/要超过总数一半的DP问题中,我们可以考虑维护最大值和其他数之和的差
    • 之前我应该是见过类似的trick的但是十分久远,以至于我发散思维想了20min左右都没想到此题这么板的解法/jk
posted @ 2025-11-19 21:36  睡神本神  阅读(10)  评论(0)    收藏  举报