Autumn: Sep.~

可是深圳现在还是夏天呢.jpg


9.22

很晚才来训练室,其实没啥状态,熬夜熬的好累,但总得有个开始是不是。

CF2227H:一万年前的一场周末模拟赛。但是我一直没补。一开始我的做法是一个看起来很对的 dp,大概是 \(f_{u,0/1}\) 表示 \(u\) 的子树里有几个点没有选。但是没选的点我把贡献也记下来了,具体转移就不说了没啥用还很麻烦,显然这样是错的,因为有可能这个点直接不选。然后我又加了一个数组记录如果这个点子树里有一个叶子没选的最优值,可是发现还是不对,到这里为止就太复杂了,我自己都绕进去出不来了。实际上正解和我的想法差不多,因为一个子树如果说有偶数个叶子,那么它对祖先没贡献,而奇数的话贡献就只是 \(1\)。对于要删掉的节点,我们先预处理删掉它对答案的贡献,这个也好算,就是到根路径上每个点叶子数变化前后的奇偶性差别,一次 dfs 就搞定了。然后枚举删哪个叶子就行了。

P5020:我感觉我没救了,还在做一万年前的老东西。其实是我想练背包,ChatGPT 给了我这个题。随便猜一猜感觉是只能用 a 里面的数,然后就是跑一个可达性的完全背包。严谨一些的话我们来证明。
那 \(n=1\) 的时候肯定用 \(a_1\) 就行了。那么用数学归纳法,假设 \(n=k\) 时只用 \(a\) 中数即为最优解,则当 \(n=k+1\) 时,只需讨论 \(a_{k+1}\) 不能被表示的情况。如果要加入一个新数,那么这个数必然不能被表示,否则不用加;还得比 \(a_{k+1}\) 小,不然还是凑不出来。那这样的数很显然不能被 a 表示但是可以被 b
表示,不符合题意。所以就是加入 \(a_{k+1}\)。

posted @ 2026-09-22 20:07  LHLeisus  阅读(3)  评论(0)    收藏  举报