回溯法 裝載問題

2021-10-10 00:01:44 字數 1272 閱讀 5381

有n個貨櫃要裝上載重量為w的輪船,其中貨櫃i的重量為wi。不考慮貨櫃體積的限制,現在要將若干貨櫃裝上輪船,使他們的總重量為w,如果總重量相同要盡可能的使用少的貨櫃。

有n個貨櫃要裝上載重量為c1、c2的輪船,其中貨櫃i的重量為wi。問兩艘輪船能否裝下所有貨櫃。

深搜所有情況,重點是要剪枝。

題目一剪枝條件是,tw + w[i] <= weight && tw + rw >= weight。當前貨櫃裝入後是否超過最大載重量,當前貨櫃總重加上剩下貨櫃總重是否大於最大載重。

題目二剪枝條件是,tw + w[i] <= c1 && tw + rw > maxw當前貨櫃裝入後是否超過最大載重量,當前貨櫃總重加上剩下貨櫃總重是否大於最大載重。

#include

#include

using

namespace std;

vector <

int>x(

5,0)

;vector <

int>op(

5,0)

;int min =

1e9;

int w=

;int weight =10;

void

dfs(

int num, vector <

int>

&op,

int tw,

int rw,

int count)

::min = count;

//一開始我擔心op[i]會儲存上次的結果,但是發現沒有。因為每次dfs結束,當前結點都置零了。

}else

//op[i] = 0;放在這個位置不對!!!會導致有些情況回溯不了}}

}int maxw =

-1e9

;int c1 =50;

int c2 =50;

void

dfs2

(int num, vector <

int>

& op,

int tw,

int rw)

maxw = tw;

}else

//op[i] = 0;放在這個位置不對!!!會導致有些情況回溯不了}}

}int

main()

}

裝載問題 回溯法

描述 有一批共n個貨櫃要裝上艘載重量為c的輪船,其中貨櫃i的重量為wi。找出一種最優裝載方案,將輪船盡可能裝滿,即在裝載體積不受限制的情況下,將盡可能重的貨櫃裝上輪船。輸入 由檔案load.in給出輸入資料。第一行有2個正整數n和c。n是貨櫃數,c是輪船的載重量。接下來的1行中有n個正整數,表示貨櫃...

裝載問題 回溯法

有n個貨櫃要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi,且 問題 是否有乙個合理的裝載方案,可將這n個貨櫃裝上這2艘輪船?如果有,找出一種裝載方案。例如 當n 3,c1 c2 50 1 若w 10,40,40 可將貨櫃1和貨櫃2裝上第一艘輪船,而將貨櫃3裝上第二艘輪船 2 如果w ...

裝載問題 回溯法

有一批共 n n n 個貨櫃要裝上艘載重量為 c c c 的輪船,其中貨櫃 i i i 的重量為 w i wi wi。找出一種最優裝載方案,將輪船盡可能裝滿,即在裝載體積不受限制的情況下,將盡可能重的貨櫃裝上輪船。第一行有 2 個正整數 n n n 和 c c c。n n n 是貨櫃數,c c c ...