揹包問題和裝載問題

2021-08-28 13:31:20 字數 1216 閱讀 4989

有乙個揹包,能盛放的物品總重量為s,設有n件物品,其重量分別為w1,w2,…,wn,希看從n件物品中選擇若干物品,所選物品的重量之和恰能放進該揹包,即所選物品的重量之和即是s。

#include #include using namespace std;

const int n = 7;//物品數量

const int s = 20;//能盛放的物品總重量

int w[n+1] = ;

int knap(int s, int n)

if(s<0 || (s>0&&n<1))

//第n個物品入選

if(knap(s-w[n], n-1))

//第n個物品沒入選

return knap(s, n-1); }

int main(int argc, char *argv)

else

system("pause");

return 0;

}

有兩艘船,載重量分別是

c1、 c2,

n個貨櫃,重量是wi(

i=1…n)

,且所有貨櫃的總重量不超過

c1+c2

。確定是否有可能將所有貨櫃全部裝入兩艘船。

(1) 首先將第一艘輪船盡可能裝滿;

(2) 將剩餘的貨櫃裝上第二艘輪船。

int search(int m)

} }

#includeusing namespace std;   

const int max(12);

int c1,c2,n;

int weight;

int best;

int boxw[max];

void backtrack(int a)

if(weight+boxw[a]<=c1)

backtrack(a+1);

}

int main()

best=weight=0;

backtrack(0);

if(sum-best<=c2)

cout<<"yes"

cout<<"no"<}

return 0;

}

裝載問題(動態規劃揹包問題)

描述 有兩艘船,載重量分別是c1 c2,n個貨櫃,重量是wi i 1 n 且所有貨櫃的總重量不超過c1 c2。確定是否有可能將所有貨櫃全部裝入兩艘船。輸入 多個測例,每個測例的輸入佔兩行。第一行一次是c1 c2和n n 10 第二行n個整數表示wi i 1 n n等於0標誌輸入結束。輸出 對於每個測...

回溯法 裝載問題與0 1揹包問題

問題 有一批共n個貨櫃要裝上2艘載重量分別為c1和c2的輪船,其中貨櫃i的重量為wi,且貨櫃總重小於等於輪船總載重。裝載問題要求確定是否有乙個合理的裝載方案可將這批貨櫃裝上這2艘輪船。如果有,找出一種裝載方案。分析 假如要將貨櫃裝進兩艘輪船,那麼只需將第一艘輪船盡可能裝滿,剩下的盡量裝進第二艘就可以...

0 1揹包問題和揹包問題

1 0 1揹包問題 0 1揹包問題可做如下描述 給定n種物品和乙個揹包,每個物品有乙個 wi,vi 對,表示其重量和價值。揹包的總容量為c。對於每個物品,要麼裝要麼不裝 0或1 現在需要設計方案使得揹包內的物品的總價值最大。演算法如下 0 1揹包問題可以使用動態規劃來解決。d i j 表示考慮第i件...