有乙個揹包,能盛放的物品總重量為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件...