混合背包

混合背包

问题简述

结合此前的三种背包问题。也就是说有的武平可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有上限(多重背包)

算法思路

①、将01背包和完全背包混合
考虑到在01背包和完全背包中给出的伪代码只有一处不同,故如果只有两类物品:一类物品只能取一次,另一类物品可以取无限次,那么只需在对每个物品应用转移方程时,根据物品的类别选用顺序或逆序的循环即可,复杂度是O(VN)。伪代码如下:

for i=1..N
    ifi件物品属于01背包
        for v=V..0
            f[v]=max{f[v],f[v-c[i]]+w[i]};
    else ifi件物品属于完全背包
        for v=0..V
            f[v]=max{f[v],f[v-c[i]]+w[i]};

②、进而加上多重背包
如果再加上有的物品最多可以取有限次,那么原则上也可以给出O(VN)的解法:遇到多重背包类型的物品用单调队列解即可。但如果不考虑超过NOIP范围的算法的话,用P03中将每个这类物品分成O(log n[i])个01背包的物品的方法也已经很优了。

当然,更清晰的写法是调用我们前面给出的三个相关过程。

for i=1..N
    ifi件物品属于01背包
        ZeroOnePack(c[i],w[i])
    else ifi件物品属于完全背包
        CompletePack(c[i],w[i])
    else ifi件物品属于多重背包
        MultiplePack(c[i],w[i],n[i])

算法小结

混合背包不过是之前的几个背包问题的联合,或是说是几个背包问题的一种运用,望读者在理解该问题之前仔细研读此前的3种背包问题。

哈密尔顿函数是经典力学中的一个非常重要的概念,它与变分法密切相关。 首先,我们来看哈密尔顿函数的定义。对于一个具有广义坐标$q_i$和广义动量$p_i$的系统,哈密尔顿函数$H(q,p)$定义为: $$H(q,p) = \sum_i p_i \dot{q}_i - L(q,\dot{q})$$ 其中,$L$是系统的拉格朗日函数哈密尔顿函数是一个关于广义坐标和广义动量的函数。 接下来,我们来看哈密尔顿函数与变分法的联系。在经典力学中,哈密尔顿原理是指系统在某个时间段内的运动路径,使得作用量最小。作用量$S$是一个关于路径$q(t)$的函数,定义为: $$S[q(t)] = \int_{t_1}^{t_2} L(q,\dot{q})dt$$ 其中,$L$是系统的拉格朗日函数。 利用变分法可以得到哈密尔顿原理的欧拉-拉格朗日方程,即: $$\frac{\delta S}{\delta q} = \frac{d}{dt}\frac{\delta S}{\delta \dot{q}}$$ 将$L$表示为哈密尔顿函数的形式,即$L(q,\dot{q})=p\dot{q}-H(q,p)$,其中$p$是广义动量,代入作用量的表达式中,可以得到: $$S[q(t)] = \int_{t_1}^{t_2} [p\dot{q}-H(q,p)]dt$$ 接下来,我们对路径$q(t)$进行微小变化$\delta q(t)$,并保持端点不变。利用变分法,可以得到: $$\delta S = \int_{t_1}^{t_2} [\delta p\dot{q} + p\delta \dot{q} - \frac{\partial H}{\partial q}\delta q - \frac{\partial H}{\partial p}\delta p]dt + [p\delta q]_{t_1}^{t_2}$$ 根据变分法的要求,端点不变,即$[p\delta q]_{t_1}^{t_2}=0$。因此,我们可以得到哈密尔顿原理的欧拉-拉格朗日方程: $$\begin{cases}\frac{\partial H}{\partial p}=\dot{q}\\-\frac{\partial H}{\partial q}=\dot{p}\end{cases}$$ 这就是哈密尔顿函数与变分法的联系。使用哈密尔顿函数,可以将拉格朗日方程转化为哈密尔顿方程,从而更方便地研究系统的动力学性质。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值