贪心算法
- c:载重量
- w:货物重量数组(程序开始前将其递增排序)
- x:路径数组(用来记录最优解)(初始化为0)
void load()
{
for(int i=1;i<=n && w[i]<=c;i++)
{
x[i]=1;
c-=w[i];
}
}
回溯算法
- i:深度
- r:第一艘船的载重量
- cw:当前船上集装箱的重量
- w:集装箱的重量数组
- x:路径数组,记录最优解
// 搜索第i层节点
void backtrack(int i)
{
if (i > n)
{
更新最优解bestx, bestw;
return;
}
r -= w[i];
// 搜索左子树
if (cw + w[i] <= c1)
{
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]; // 置反
}