map
vector
set
priority_queue
pair<生词数量,书本编号>
long long
对于给定的 T,我们用动态规划求解 $\min(T)$
F(S) 表示当前收集到的卡牌集合为 S 时,收集一套卡牌还需要的胜利次数。 注意:这里 $S \subseteq T$.
定义 $P(T) = \sum_{u\in T}p(u)$
$F(S) = \frac{1}{p(T)}\sum_{u\in T-S}p(u)f(S\cup u)+\color{#FF0000}{1}$
考虑每个 1 做的贡献,可得
进一步简化,可得:
定义 $G(T, j) = \sum_{S\in T,\vert S\vert =j} \vert S\vert ! \Pi_{u\in S} p(u)$,
结论:min(T) = $F(\emptyset) = \sum_{j=1}^{\vert T\vert } G(T, j) / p(T)^j$
G 的计算:
对于任意的 $v\in T$
因此 $G(T, j) = G(T - v, j) + p(v) \cdot j \cdot G(T-v, j-1)$, 预处理 G 的复杂度为 $O(n\cdot 2^n)$. 原问题计算所有 min(T) 的复杂度同样也是 $O(n\cdot 2^n)$.
unordered_set