0-1背包问题
概述
给定n种物品和一个背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
规定:只有两种选择,装入为1,不装为0,因此称为0-1背包问题。注:不能装入多次,也不能只装入部分。
最优子结构性质
重叠子问题性质
算法思路
实例
代码实现
设n个物品的重量存储在数组w[n]中,价值存储在数组v[n]中,背包容量为C,数组V[n+1][C+1]存放迭代结果,其中V[i][j]表示前i个物品装入容量为j的背包中获得的最大价值,数组x[n]存储装入背包的物品,动态规划法求解0/1背包问题的算法如下:
#include <iostream>
using namespace std;
int V[100][100];//设置背包内物品的最大价值
int beibao(int n, int w[], int v[], int x[], int C) {
//设置相应变量
int i, j;
for (i = 0