有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 ...