給定n個貨櫃要裝上一艘載重量為c的輪船,其中貨櫃i的重量為wi。貨櫃裝載問題要求確定在不超過輪船載重量的前提下,將盡可能多的貨櫃裝上輪船(貪心演算法中的裝載問題討論的是裝載件數;本題討論的是最大裝載重量。)
由於貨櫃問題是從n個貨櫃裡選擇一部分貨櫃,假設解向量為x(x1, x2, …, xn),其中xi∈, xi =1表示貨櫃i裝上輪船, xi =0表示貨櫃i不裝上輪船。
輸入每組測試資料:第1行有2個整數c和n。c是輪船的載重量(0<c<30000),n是貨櫃的個數(n≤20)。第2行有n個整數w1, w2, …, wn,分別表示n個貨櫃的重量。
輸出對每個測試例,輸出兩行:第1行是裝載到輪船的最大載重量,第2行是貨櫃的編號。
#include using namespace std;
class goods
int get_w()
void set(int w) };
//goods *g,貨櫃列表
//int *best,待求解的最優裝載方案
//int t,子集樹數的層號。根節點在第0層,葉節點在第n層
//int n,貨櫃的總數
//int &cw, 當前的輪船的荷載
//int bestcw ,當前的最大荷載
//int *x,滿足當前最大荷載的裝載方案
//int r剩餘的貨櫃重量和
void load(goods *g, int *x, int t, int n,int cw, int &bestcw ,int *best,int r,int c)
r=r+g[t].get_w(); //回溯的需要}}
int main()
load(g,x,0,n,0,bestcw,best,r,c);
cout
}
裝載問題 回溯演算法
題目描述 有一批共n個貨櫃要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi。裝載問題要求確定,是否有乙個合理的裝載方案可將這n個貨櫃裝上這2艘輪船。如果有,找出一種裝載方案。題目出自 計算機演算法設計與分析 第三版 王曉東 這是乙個典型的回溯演算法問題。如下 template clas...
回溯演算法之最優裝載問題
問題描述 有一批共n個貨櫃要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi,且 例如 當n 3,c1 c2 50,且w 10,40,40 時,則可以將貨櫃1和2裝到第一艘輪船上,而將貨櫃3裝到第二艘輪船上 如果w 20,40,40 則無法將這3個貨櫃都裝上輪船。基本思路 容易證明,如果...
裝載問題 回溯法
描述 有一批共n個貨櫃要裝上艘載重量為c的輪船,其中貨櫃i的重量為wi。找出一種最優裝載方案,將輪船盡可能裝滿,即在裝載體積不受限制的情況下,將盡可能重的貨櫃裝上輪船。輸入 由檔案load.in給出輸入資料。第一行有2個正整數n和c。n是貨櫃數,c是輪船的載重量。接下來的1行中有n個正整數,表示貨櫃...