背包问题 多种状态转移方程的由来和一维优化

背包问题包括 1.01背包

                       2.完全背包

                      3.多重背包

                      4.分组背包

首先第一个 01背包 含义即每一个物品可以选0个或者1个那么将整个物品枚举一遍后,当枚举到最后一次时,目前的最大值是由前面的状态的最大值推出来的,而当前的最大值则是要看此时加上当前物品后总体积是否超出,如果未超出则由上一阶段的最大值加上此时物品的价值,即为此时的最大值。

我们给定一个数组a[i][j]表式从前i个物品中选,总体积不超过j,当我们从枚举每一个i,j对应的a[i][j]

那么我们就可以递推出所i有的情况,每次a[i][j]的最大值为max(a[i-1][j] ,a[i-1][j-v[i]]+w[i])。

第二完全背包 意思和01背包一样,只不过每一个物品可以选无数次,那么我们的选法即为 0,1,....... n 次,即a[i][j]的最大值即为max(a[i-1][j],a[i-1][j-v[i]]+w[i],......a[i-1][j-n*v[i]]+n*w[i]。像高中的等差乘等比求和一样,我们都是根据给出的式子找一个特殊的式子来通过一定的计算来使难以计算的式子变得容易计算,而我们这里这个特使的式子就是a[i][j-v],通过展开后,原式子的最大值可以变成max(a[i-1][j],a[i][j-v[i]]+w[i])。这便是每一次的状态转移方程

第三多重背包问题,意思和01背包一样,只不过每一个物品有特定的数量,选法是有限的,由于数量是有限的那么我们能不能像完全背包那样找出一个特殊的式子来方便计算呢,答案是否定的,因为在完全背包里面,数量是无限的,当前n项和远大于最后一项时最后一项可以被忽略,而在多重背包里面 最后一项无法被忽略,上下两个式子存在一个a[i][j-(n+1)*v[i]]+n*w[i]的差异,而我们要求的是前n-1项的最大值,因次我们无法推出前n-1项的最大值,因此我们只能通过枚举1到n来求最大值,max(a[i-1][J],a[i-1][j-n*v[i]]+n*w[i]),也可以通过二进制优,在这里不多讲述

第四 分组背包问题 意思是有n个组,每组有一些物品,每个组中只能选一个物品,求背包装下的最大值,这一种我们要依次枚举每组中的每个物品在不超过m体积的最大值,那么和之前类似,因此我们需要引入一个新的变量k来表示 第i组的第几个物品,表示完之后就与01背包非常相似了,每一个组可以选择选一个或着不选,每一个组中的每一个物品可以选择选或着不选,那么最大值为max(a[i-1][j],a[i-1][j-v[i][k]]+w[i][k])

优化成一维当第i项只与第i-1项有关时 j逆序枚举 当第i不是只于与第i-1项有关时 ,正向枚举,

观察关系时通过状态转移方程来判断。当状态转移方程里面转化时左边都是i右边都是i-1,则逆序枚举,防止第i-1层被第i层给污染,反之则不需要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值