📄 knap.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 + -