【题解】Solution Set - NOIP2024集训Day83 dp

【题解】Solution Set - NOIP2024集训Day83 dp

https://www.becoder.com.cn/contest/5801


「清华集训2016」Alice 和 Bob 又在玩游戏

(FAKE

对每棵树,考虑一个最 naive 的 dp。

fi:对 i 的子树而言,先手是否必胜。

枚举先手的第一步,看后手在剩下的子树中必胜的是否为偶数个,如果是则必胜。

最终合并若干个树的答案是类似的。

10min

不对,没有这么简单,后手还可以有很多可能赢的策略。


https://www.luogu.com.cn/article/lckb7fzi

可以转化为有向图上游戏,然后应用 SG 函数

具体的,每次操作后仍是一个森林,于是将个森林看作一个局面,i.e. 有向图游戏中的点。

而一个森林中,分别对每棵子树操作是不会相互影响的,所一个局面(森林)的 SG 值就是所有树的 SG 值的异或和。

感觉 0-1 trie 完全可以用线段树来理解,包括:合并啊,懒标啊,还有查询 mex(相当于线段树上二分)



「SDOI2009」学校食堂

(aorb)(aansb)=ab

(FAKE

考虑区间 dp。

f(l,r,a,b)l1 的口味值是 ar+1 的口味是 b,做完 [l,r+1] 内的菜的最少时间。特别的 a=0 时,忽略 l 的时间;b=0 时忽略 r+1 的时间。

答案即:f(1,n,0,0)

我们容易拿到每个人最多能够提前到的位置。这个些位置的数量是 O(b) 的。

直接枚举 i 插队到谁的前面,有转移:

f(l,r,a,b)=mini(f(l,i1,a,tr)+f(i,r1,tr,b))

注意到对于同一个 ra,b,l 可能的取值都是 O(b) 的,精细实现可以做到 O(nb4)

30min

错了,因为转移的时候枚举 i 会插入到前面的哪个位置之后,分成了两个完全独立的部分,实际上是不能的。


(其实吧,虽然这个 b 很小很小,但是我觉得大指数的 ploy(b) 也不失为一种合理的尝试吧。

f(i,s,j):前 i1 个已经在 i 前面,i 往后(含)已经在 i 前面的情况为 s,最后的位置在 j

s 包含 i 是因为 i 的菜是否做好了是两种不同的转移,且都是必要的。

统计答案直接枚举最后一个人在哪。

转移是容易的。

posted @   CloudWings  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示