Warning: session_start(): open(/tmp/sess_36a77e63bafdc9eacc535e772c0074cb, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2022-2023:teams:eager_to_embrace_the_seniors_thigh:1h [CVBB ACM Team]

用户工具

站点工具


2022-2023:teams:eager_to_embrace_the_seniors_thigh:1h

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2022-2023:teams:eager_to_embrace_the_seniors_thigh:1h [2022/08/11 16:09]
11231123 [题解]
2022-2023:teams:eager_to_embrace_the_seniors_thigh:1h [2022/08/11 17:59] (当前版本)
11231123 [题解]
行 10: 行 10:
 我们发现限制是对于每个 $x_i$ 的二进制位进行的,所以考虑直接将 $a_ix_i$ 分成 $\sum{a_i2^ky_{i,​k}}$ ,其中 $y_{i,k}$ 表示 $a_i2^k$ 是否被选择了。这样我们就把问题转化成了 $a_i2^k$ 这共 $60n$ 个物品,其中有 $k$ 个物品被强制不能选择时,选择的物品的总和不超过 $m$ 的方案数。 我们发现限制是对于每个 $x_i$ 的二进制位进行的,所以考虑直接将 $a_ix_i$ 分成 $\sum{a_i2^ky_{i,​k}}$ ,其中 $y_{i,k}$ 表示 $a_i2^k$ 是否被选择了。这样我们就把问题转化成了 $a_i2^k$ 这共 $60n$ 个物品,其中有 $k$ 个物品被强制不能选择时,选择的物品的总和不超过 $m$ 的方案数。
  
-注意到 $m$ 非常大,所以直接做背包是没有前途的。这时候我们注意到 $a_i2^k$ 这样的一个物品是不会影响到总和的二进制最低的 $k$ 位的,所以我们考虑按照 $2^0$ 到 $2^59$ 这个顺序来对这些物品进行DP。+注意到 $m$ 非常大,所以直接做背包是没有前途的。这时候我们注意到 $a_i2^k$ 这样的一个物品是不会影响到总和的二进制最低的 $k$ 位的,所以我们考虑按照 $2^0$ 到 $2^{59}$ 这个顺序来对这些物品进行DP。
  
-我们定义 $dp_{i,​j,​0/​1}$ 表示已经选完 $2^i$ 一类的物品,总和 $S$ 满足 $\lfloor \frac{S}{2^{i+1}} \rfloor = j$ ,且 $S\%2^i$ 是否严格大于 $m\%2^i$ 的方案数。+我们定义 $dp_{i,​j,​0/​1}$ 表示已经选完 $2^i$ 一类的物品,总和 $S$ 满足 $\lfloor \frac{S}{2^{i+1}} \rfloor = j$ ,且 $S\%2^{i+1}$ 是否严格大于 $m\%2^{i+1}$ 的方案数。
  
  
 考虑先分析一下第二维的范围,我们假设 $\sum{a_i}=SA$ ,已经选完 $2^k$ 的物品时,$S\le \sum_{i=0}^{k}{2^iSA}\le 2^{k+1}SA$ ,所以第二维最多也就是 $SA$ 。同时我们也可以发现这时候直接DP还是没啥前途。 考虑先分析一下第二维的范围,我们假设 $\sum{a_i}=SA$ ,已经选完 $2^k$ 的物品时,$S\le \sum_{i=0}^{k}{2^iSA}\le 2^{k+1}SA$ ,所以第二维最多也就是 $SA$ 。同时我们也可以发现这时候直接DP还是没啥前途。
  
-考虑对于每一类物品一起算,利用生成函数显然就是 $\prod_{i=1}^{n}{[(i,​k)\notin (b,​c)](1+x^{2^ka_i})}$+考虑对于每一类物品一起算,利用生成函数显然就是 $\prod_{i=1}^{n}{[(i,​k)\notin (b,​c)](1+x^{2^ka_i})}$ ​,进行变化可以变为 $\prod_{i=1}^{n}{(1+x^{2^ka_i})*(\prod_{(i,​k)\in (b,​c)}{(1+x^{2^ka_i})})^{-1}}$ 。我们考虑将其中的 $x^{2^k}$ 变为 $x$ ,因为对于每个 $2^k$ 我们可以发现剩余的部分是完全相同的。前面的部分设为 $g(x)=\prod_{i=1}^{n}{(1+x^{a_i})}$ ,后面的部分我们考虑对每个 $2^k$ 我们做一次反向的背包来得到最终的式子,设其为 $G(x)$ 。 
 + 
 +我们注意到,对于 $[x^i]G(x)$ 和 $dp_{k-1,​j,​0/​1}$ ,我们可以得到新的第二维是 $\lfloor \frac{2^ki+2^kj+Y}{2^{k+1}} \rfloor=\lfloor \frac{i+j}{2} \rfloor$ ,其中 $Y$ 是上一次的余数。第三维我们可以按照前面的 $0$ 到 $k-1$ 位是否严格大于 $m$ 来进行讨论,严格大于则当前位只需要大于等于就可以大于,否则当前位要严格大于。 
 + 
 +考虑对于每个 $2^k$ 得到 $G(x)$ 之后怎么结合 $dp_{k-1}$ 来得到 $dp_{k}$ 。我们分两类来转移,$dp_{k,​\lfloor \frac{X}{2} \rfloor,​[X\&​1>​m_k]}=\sum_{i+j=X}{[x^i]G(x)*dp_{k-1,​j,​0}}$ 和 $dp_{k,​\lfloor \frac{X}{2} \rfloor,​[X\&​1\ge m_k]}=\sum_{i+j=X}{[x^i]G(x)*dp_{k-1,​j,​1}}$ 。这两类分别做一次卷积即可。 
 + 
 +最后我们的答案就是 $dp_{59,​0,​0}$ ,我实现略微卡常。
2022-2023/teams/eager_to_embrace_the_seniors_thigh/1h.1660205362.txt.gz · 最后更改: 2022/08/11 16:09 由 11231123