本题是01背包的变式,所以作者会详细的讲解(耗时半天)。
还记得01背包的两种选择吗:
1.不选,然后去考虑下一个
2.选,背包容量减去重量,总值加上价值。
而这题是有五种选择(哭死):
1.不选,然后去考虑下一个
2.选且只选这个主件
3.选这个主件,并且选附件1
4.选这个主件,并且选附件2
5.选这个主件,并且选附件1和附件2.
我们可以用 F j F_j Fj表示花费钱数为 j j j时,价格和重要度乘积的最大值。可知:
当 F j ⩾ V i , 0 时 F_j⩾V_i,_0时 Fj⩾Vi,0时, F j = m a x ( F j , F j − v i , 0 + V i , 0 ∗ P i , 0 ) F_j=max(F_j,F_j-v_i,_0+V_i,_0*P_i,_0) Fj=max(Fj,Fj−vi,0+Vi,0∗Pi,0)
当 F j ⩾ ( V i , 0 + V i , 1 ) F_j⩾(V_i,_0+V_i,_1) Fj⩾(Vi,0+Vi,1)时, F j = m a x ( F j , F j − v i , 0 − v i , 1 + V i , 0 ∗ P i , 0 + V i , 1 ∗ P i , 1 ) F_j=max(F_j,F_j-v_i,_0-v_i,_1+V_i,_0*P_i,_0+V_i,_1*P_i,_1) Fj=max(Fj,Fj−vi,0−vi,1+Vi,0∗Pi,0+Vi,