包括此篇文章在内的关于01背包和完全背包问题的文章均转自:http://www.ahathinking.com/
在01背包中,有时问到“恰好装满背包”时的最大价值,与不要求装满背包的区别就是在初始化的时候,其实对于没有要求必须装满背包的情况下,初始化最大价值都为0,是不存在非法状态的,所有的都是合法状态,因为可以什么都不装,这个解就是0,但是如果要求恰好装满,则必须区别初始化,除了f[0]=0,其他的f[1…v]均设为-∞或者一个比较大的负数来表示该状态是非法的。
这样的初始化能够保证,如果子问题的状态是合法的(恰好装满),那么才能得到合法的状态;如果子问题状态是非法的,则当前问题的状态依然非法,即不存在恰好装满的情况。
代码如下:
#include
using namespace std;
int maxV[201];
int weight[11];
int value[11];
int V, N;
void main()
{
}
为了加深理解,输出每轮循环的状态矩阵如下,对照每个物体的情况,就会理解为什么做那样的初始化了。
本文深入探讨了01背包问题与完全背包问题在初始化最大价值时的区别,通过实例代码展示了如何正确初始化,以确保解的合法性。文章结合状态转移方程,详细解释了初始化对解的影响,并提供了每轮循环的状态矩阵输出,帮助读者直观理解初始化策略的重要性。

1610

被折叠的 条评论
为什么被折叠?



