发现美味值相同的蛋糕可以分为同一组,可以转化为若干个数量 b_m。显然 Alice 只要选目前可选的美味值最低的就好了,因为这样后续可操作次数一定不劣。而 Bob 要考虑的事情就比较多了,需要把某一美味值的所有蛋糕在 Alice 选到之前全都选掉才能阻止 Alice 选。
所以转化为要在某一次数限制内消耗 c_i 次来使 Alice 少选到一种,考虑反悔贪心,设 cur 为目前剩余的次数,res 为 Alice 选到的数量,再开个大根堆记录已经选过的 c_i。初始 cur=0,res=0,每次若 c_i\le cur 就直接扔堆里,否则本次一定空了,cur,res 均加上 1。同时若堆顶比 c_i 大,可以用 c_i 替换来省出一些次数加入 cur。最终 res 就是答案。
E. Wonderful Tree!
叶子节点本身就合法,考虑从叶子节点向上 dp,也就是保证所有子树已经全部合法的情况下合并到根。初步理解是如果要让节点 u 的子节点权值和增大,也就是给某个子节点加权值时,需要一直传递到某一叶子节点以保持子树的合法性。
但是写出来挂了,因为如果某一节点 u 本来就合法,也就是 a_u\ge \sum a_v,那么这个点可以直接加权值而不用继续往下传递。所以设 f_{u,i} 表示距离 u 为 i 的节点还能直接加多少权值。
则对于所有叶子节点 x 均有 f_{x,0}=+\infty,合并到根时有 f_{u,i}=\sum f_{v,i-1},f_{u,0}=a_u-\sum a_v。同时每到一个节点使用剩余容量使其合法即可,可以发现这样在处理完整颗子树后根节点的权值不变,所以是正确的。
F. Interesting Problem
发现能用 a_i 消除必须保证下标 x=a_i,也就是说需要在其前面删掉恰好 b_i=i-a_i 个元素,所以 i\ge a_i 且 i 与 a_i 同奇偶才有可能消除。然后考虑设 f_{l,r} 为删掉 [l,r] 需要在 [1,l-1] 中操作的最少次数,然后区间 dp 枚举断点,还要考虑 l 和 r 为一组最后消除的情况。因此有: