问题:0/1背包问题
例子:weight数组代表物品重量,value数组代表物品价值,M代表背包容量。背包是按单位价值递减的顺序排列的,即value[i]/weight[i]>value[i-1]/weight[i-1].
const int weight[Max]={1,11,21,23,33,43,45,55};const int value[Max]={11,21,31,33,43,53,55,65};intM=110;迭代法的回溯分析:回溯法可以通过限界函数做剪枝处理。搜素的约束函数是总重量<=背包容量M.下面通过贪心算法确定限界函数,当前面k-1个物品已经做好装包决策,可能达到的最大效益值是该上界函数。// BackTrace_0_1backpack.cpp : 定义控制台应用程序的入口点。
//回溯法解决0/1背包问题;
#include "stdafx.h"
#include
#include
#include
using namespace std;
const int Max=8;
const int weight[Max]={1,11,21,23,33,43,45,55};
const int value[Max]={11,21,31,33,43,53,55,65};
//如果搜素算法在求解该节点之前已经知道目前的最优解大于这个界值的效益,就没有必要接着搜素下去。
//前k件物品是否装已经确定,还剩k+1,...,Max-1件未装
double BoundF(int cp, int cw, int k, int M)
{
double b=cp