⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 knap.cpp

📁 计算机算法设计与分析(王晓东)教材上相关源程序代码。 包括分治法(4)
💻 CPP
字号:
#include"knap.h"
template<class Typew,class Typep>
void Knap<Typew,Typep>::Backtrack(int i)
{
	if(i>n)
	{
		//到达叶子节点
		bestp=cp;
		return;
	}

	if(cw+w[i]<=c)
	{
		//左子树满足约束
		cw+=w[i];
		cp+=p[i];
		Backtrack(i+1);
		cw-=w[i];
		cp-=p[i];
	}

	if(Bound(i+1)>bestp)
	{
		//右子树满足限界函数
		Backtrack(i+1);
	}
	
}

template<class Typew,class Typep>
Typep Knap<Typew,Typep>::Bound(int i)
{

	//计算上界
	Typew cleft=c-cw;//剩余容量
	Typep b=cp;
	//以物品单位重量价值递减次序装入物品
	while(i<=n&& w[i]<=cleft)
	{
		cleft-=w[i];
		b+=p[i];
		i++;
	}

	//装满背包
	if(i<=n) b+=p[i]*cleft/w[i];
	return b;

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -