其他分享
首页 > 其他分享> > LGP5366口胡

LGP5366口胡

作者:互联网

第一次看见这题的时候觉得挺牛逼的,然后想了半个小时发现其实还是挺简单(

首先:\(A=\max_{n=1}^{10^8}\sigma(n)=736,B=\max_{n=1}^{10^8}=8\)。

首先 \(G,L\) 都没啥必要,因为可以变成 \(1,n\)。

那么 \(X/L\) 只能是 \(n\) 的因数。问题变成了在 \(n\) 的因数中钦定某个数必选,然后要使 \(\gcd=1,lcm=n\)。

观察一下可以知道 \(\gcd,lcm\) 都是套在表面上的。设 \(n=\prod p_i^{k_i}\),把每个数状压一下,设这个数为 \(\prod P_i^{K_i}\),第 \(i\) 位为 \(0\) 表示 \(0<K_i<k_i\),\(2\) 表示 \(K_i=k_i\),\(1\) 表示 \(K_i=0\)。

然后这玩意儿看上去像是在做 Or 背包的同时做一个 And 背包。如果不钦定是可以做到 \(A4^B\) 的。

注意到这个 \(A4^B\) 的代价我们是可以接受的。所以我们考虑做一个“逆元”的操作,把钦定的数字从其中删去,这个时候得到的相当于是钦定这个数不选的结果。然后用之前的减去这个结果就行了。

这玩意儿好像不太可做。但是好像把 \(S1,S2\) 糅合到一起是没问题的。。。

所以重新设状态,\(f[S1<<k|S2]\) 表示上面的 \(f[S1][S2]\)。

然后这里就是纯纯 Or 卷积了。逆元很好做。(实际上也只可能是 \(2\))

需要注意的是要以点值形式保存,然后做一个高维差分。复杂度是单次 \(O(4^B)\),可以接受。

不过嘛,可以考虑计算每一个数对最开始背包的贡献。做一个子集和差不多了。

复杂度 \(O(A4^B)\)。

标签:背包,钦定,然后,A4,LGP5366,lcm,复杂度
来源: https://www.cnblogs.com/lmpp/p/16197482.html