最值反演学习笔记

关于用一个集合的子集的 min 求这个集合的 max 的问题。当然用 max 求 min 也可以。

考虑构造一个只和集合元素个数有关的 \( f( \left | S \right | ) \) ,使得可以

\( kthmax(S)=\sum\limits_{T \subseteq S} f( \left | T \right | ) min(T) \)

考虑第 i 大的元素被计算了几次,就是 \( \sum\limits_{j=0}^{i-1}C_{i-1}^{j}f(j+1) \)

  第 i 大的元素作为 min(T) 出现,说明其它元素都是比它大的。

需要       \( \sum\limits_{j=0}^{i-1}C_{i-1}^{j}f(j+1) = [i=k] \)

让 i 表示 i-1   \( \sum\limits_{j=0}^{i}C_{i}^{j}f(j+1) = [i=k-1] \) 

\( g(i)=[i=k-1]  ,  h(i)=f(i+1) \) 

则        \( \sum\limits_{j=0}^{i}C_{i}^{j}h(j)=g(i) \)

二项式反演    \( h(i) = \sum\limits_{j=0}^{i}(-1)^{i-j}C_{i}^{j}g(j) \)

当 \( j=k-1 \) 时 \( g(j) \) 不为 0 ,所以  \( h(i)=(-1)^{i-k+1}C_{i}^{k-1} \)

即      \( f(i) = (-1)^{i-k}C_{i-1}^{k-1} \)

求第 k 大的话,只要统计元素个数 >=k 的集合即可。

思考:用 gcd(S) 表示 lcm(S) ?

设有 cnt 个质因子。\( p_{i} \) 表示第 i 个质因子, \( t_{ji} \) 表示第 j 个元素的第 i 个质因子的指数。

\( lcm(S)=\prod\limits_{i=1}^{cnt}p_{i}^{ \max\limits_{_{j \in S}} \{t_{_{ji}}\} } \)

\( gcd(S)=\prod\limits_{i=1}^{cnt}p_{i}^{ \min\limits_{_{j \in S}} \{t_{_{ji}}\} } \)

\( lcm(S)=\prod\limits_{i=1}^{cnt}p_{i}^{ \sum\limits_{_{T \subseteq S}}(-1)^{^{\left | T \right | -1}} \min\limits_{_{j \in T}} \{t_{_{ji}}\} } \)

指数上的 \( \sum \) 就是底数上的 \( \prod \) ,所以

\( lcm(S)=\prod\limits_{T \subseteq S}gcd(T)^{ (-1)^{\left | T \right | -1} } \)

posted on 2019-01-15 22:00  Narh  阅读(498)  评论(0编辑  收藏  举报

导航