二进制背包分组
二进制背包分组
具体地说就是令 \(A_{i,j}\left(j\in\left[0,\lfloor \log_2(k_i+1)\rfloor-1\right]\right)\) 分别表示由 \(2^{j}\) 个单个物品捆绑而成的大物品.特殊地,若 \(k_i+1\) 不是 \(2\) 的整数次幂,则需要在最后添加一个由 \(k_i-2^{\lfloor \log_2(k_i+1)\rfloor-1}\) 个单个物品捆绑而成的大物品用于补足.
显然,通过上述拆分方式,可以表示任意 \(\le k_i\) 个物品的等效选择方式
对于 \(0\) 到 \(2^j\) ,从二进制表示的角度出发可以得出。
对于 \(2^j+1\) 到 \(A_{i,j}\),由于 \(k_i-2^{\lfloor \log_2(k_i+1)\rfloor-1}\) 必然小于前几项 \(2\) 的整数次幂之和,故此时仍在表示范围之内。

浙公网安备 33010602011771号