动态规划——背包问题(C语言)

背包问题一般也是很难去理解,最主要的是理解思路

废话不多说,直接开始。

首先可以理解为像是一个树一样;

左子树为拾取,右子树为不拾取

假如背包容量为 8。然后有以下一些物品 

物品1 物品2 物品3 物品4
序号 1 2 3 4
体积 4 3 3 5
价值 5 5 4 4

类似于这样:

动态规划——背包问题(C语言)_第1张图片

以下是C语言代码实现,注释已写

#include
#include

/*val是物品的价值,v为物品的体积,dp第一个是物品的下标
* 第二个是物品的体积,意为价值
* 
*/

int val[1001], v[1001], dp[1001][1001] = { 0 };
int n, V;
int Max(int a, int b)							//判断大小
{
	return a > b ? a : b;
}
void backpack() {
	for (int i = v[0]; i <= V; i++) {
		dp[0][i] = val[0];						//当背包容量大于物品容量时,放入物品0
	}
	for (int i = 1; i <= n; i++){
		for (int j = 1; j <= V; j++) {			//先便利物品再遍历体积

			if(j

 

你可能感兴趣的:(c语言,动态规划,算法,c++,c语言)