2024.9.24 计划

项目部分

其他

总结

1.混合背包问题可以都转化为多重背包,然后直接单调队列优化基本能过
2.对于高维费用的背包问题,有三种,一种是体积至多为j,第二种是体积恰好为j,第三种是体积至少为j。潜水员这个题就是至少为j,所以在状态转移的方程中:
一般的二维费用问题是:

for (int j = m1; j >= v1; j -- )
	for (int k = m2; k >= v2; k -- )
		f[j][k] = min(f[j][k], f[j - v1][k - v2]);

但是这个题不一样,假设f[3][5]这个状态,表示第一维不少于3,第二维不少于5,那么此时找到一个物品,v1 = 6,v2 = 7,可以发现如果拿的话,那么状态下标会成附负数,但是这时候可以将其变为0,这是因为问题是不少于,从0开始更新,第一维是6,第二维是7,同样满足第一维不少于3,第二维不少于5。
所以此时的状态转移方程就变为:

for (int j = m1; j >= 0; j -- )
	for (int k = m2; k >= 0; k -- )
		f[j][k] = min(f[j][k], f[max(0, j - v1)][max(0, k - v2)]);

同时还要注意初始化问题,可以参考背包问题三种初始化

posted on 2024-09-24 11:07  Laurance  阅读(15)  评论(0)    收藏  举报