3. 上界函数
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// 上界函数
template <class Type>
class Loading
{
friend Type MaxLoading(Type[], Type, int); // 友元函数
private:
void Backtrack(int i); // 回溯函数
int n; // 集装箱数
Type *w, // 集装箱重量数组
c, // 第一艘轮船的在载重量
cw, // 当前载重量
bestw, // 当前最优装载重量
r; // 剩余集装箱重量
};
template <class Type>
void Loading<Type> ::Backtrack(int i){ // 定义成员函数,搜索第i层节点
if(i>n){ // 到达叶节点
bestw=cw;
return;
}
// 搜索子树
r -= w[i];
if(cw+w[i]<=c){ // x[i]=1
cw += w[i];
Backtrack(i+1);
cw -= w[i];
}
if(cw+r>bestw) // x[i]=0
Backtrack(i+1);
r += w[i];
}
template <class Type>
Type