问题 有 n 种物品,其中第 i 种物品的体积为v[i],价值为w[i],并且有c[i]个, 有一个容积为 m 的背包,选若干个物品装入背包,求解将哪些物品装入背包 可使这些物品的总体 积不超过背包容量,且价值总和最大。 时间复杂度 n O( ∑ log( c[i] ) * m ) i = 1 思路 把每种物品用二进制拆分成独立的几个物品再转化成01背包 code for( int i = 1; i <= n; i++ ) { int num = min( c[i], m / v[i] ); for( int k = 1; num > 0; k <<= 1 ) { if( k > num ) k = num; num -= k; for( int j = m; j >= v[i] * k; j-- ) f[j] = max( f[j], f[j - v[i] * k] + w[i] * k );//都要*k } }