Professional layer CodeForces - 1103D (状压,gcd)

大意: 给定$n$元素序列$a$, 现在想要让$gcd(a_1,a_2,...,a_n)=1$. 对于每个$a_i$可以除以一个不超过$k$的因子, 代价为$e_i$, 假设共选出$x$个元素, 代价和为$y$, 求$xy$的最小值.

 

设$g=gcd(a_1,a_2,...,a_n)=p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_r^{\alpha_r}$, 有$1\le r \le 11$

我们考虑最优解的结构, 对于一个数$a_i$, 它的素因子$p_k$想要对答案产生贡献则必须将$p_k$全部除去, 所以最优解一定至多选择$r$个元素.

这样的话每个状态可以用二进制表示, 并且只需要维护它$e$前$r$小的即可.

具体实现如果暴力枚举$2^{2r}$转移显然要超时, 有个技巧是枚举子集可以达到$3^r$, 具体见代码, 这样总复杂度就为$O(nlogn+\sqrt{C}+Mr^23^r)$

猜你喜欢

转载自www.cnblogs.com/uid001/p/10501659.html