回溯演算法 裝載問題

2021-09-29 01:27:33 字數 942 閱讀 1188

給定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個正整數,表示貨櫃...