NODSX2304B. 抽卡
NODSX2304B. 抽卡
题意
改个名字,Alice 和 Bob 在玩游戏……
有 \(n \le 15\) 个数字,每次玩家随机选择至多 \(m\) 个数,然后扔掉个数字。Alice 先手。Alice 会尽量使扔掉的权值和最大,Bob 希望尽量小。问最终权值是什么。
首先如果存在 \(m\) 张一定选 \(m\) 张,否则全选。然后想不到贪心解法。
注意到 \(n\) 很小,于是我们枚举子集,考虑 DP 转移。
设 \(f_{A/B,S}\) 表示这轮到谁,子集为 \(S\),的权值。转移比较显然。
其中 \(mx\) 表示目前枚举的随机选择的情况,选中的最大数字的下标。\(mn\) 就是最小。
然后你发现这玩意有个 \(\max , \min\) 十分地恶心。考虑枚举 \(mx,mn\),计算满足 \(mx,mn\) 合法的方案数,来讨论。
对 \(a_i\) 排序,以 \(f_A\) 的转移为例。
若 \(mx=i\),则我们钦定选定 \(i\),然后在 \(1\sim i-1\) 里面随机选择 \(m\) 个或者不够就 \(i-1\) 个数字的方案数,设为 \(k_i\)。然后加上 \(k_i \max(f_{B,S/mx}+a_{mx},f_{B,S})\)。
我们把 \(f_{B,S/mx}\) 看做已知。相当于解方程:
设 \(A=f_{A,S},B=f_{B,S}\)。
这玩意还是有 \(\max,\min\)。
注意到题目只要我们输出浮点数,不用取模,所以一个部分分是直接枚举所有可能的 \(B\),然后代入方程判是否合法。
如果我们知道 \(A\) 和 \(A'+a_i\),\(B\) 和 \(B'+a_i\) 的大小关系,这个方程就是 \(i\) 的一堆前缀取常量,剩下取 \(A,B\)。
枚举这个大小关系,只有 \(O(n^2)\),完全可以啊。
然后枚举,每次 \(O(1)\) 解方程即可。
题解有一种方法是,部分分是枚举 \(B\),代入式 \(1\) 可以求出 \(A\),然后代入式 \(2\) 可以求出 \(B''\),如果 \(B''=B\) 这个 \(A,B\) 就是答案。观察到 \(B''-B\) 的值随着 \(B\) 的增大是单调的,因此二分 \(B\) 找到 \(B''-B=0\) 的位置。注意掉精度问题,因此判相等就是相差小于 \(1e-7\) 左右。
本文来自博客园,作者:wing_heart,转载请注明原文链接:https://www.cnblogs.com/wingheart/p/18440794

                
            
        
浙公网安备 33010602011771号