背包问题是一类组合优化的NP问题:
给定一组物品,每个物品有一定的重量和价值,在一定的限制内,我们如何选择才能使总价值最高?
不同限制的解法也不相同。
0-1背包问题描述:
有$N$种物品,重量为$weight[i]$、价值为$value[i]$,现有背包承重$total$,每种物品最多拿一个,怎样拿总价值最大?
假设每种物品的数量为$count[i]$,于是有:
$$\begin{align}\max \quad & \sum count[i] · value[i] \\st \quad & \sum count[i] · weight[i] \leqslant total \\& count[i] \in { 0, 1}\end{align}$$
当$total$不是很大的时候,打表$tab[i]$为重量为$i$时的最大价值,依次考虑物品$j$,有:
$$tab[i+weight[j]] = max (tab[i+weight[j]], tab[i] + value[j])$$
完全背包问题描述:
有$N$种物品,重量为$weight[i]$、价值为$val...
阅读全文