先二进制优化把完全背包转化成普通背包 w[] 表示体积, v[] 表示价格
DP[i][j] 表示前 i 件物品获取至少 j 毫升时所需的费用
则显然 DP[i][j] = min( DP[i-1][j], DP[i-1][j-w[i]]+v[i] )
乍一看和普通背包没有任何区别,但是主要区别在于 j-w[i] < 0 的时候,普通背包是视为这种情况不成立,式子整体为 0(不能够装背包装不下的东西);但这里处理的时候,如果碰到 j-w[i] < 0 ,则令式子整体为 v[i] 即可(可以装来超过)。
随手打的,不知道对不对。楼主可自行验证