題目:
有n件物品,每件物品的重量為w[i],價值為c[i]。現在需要選出若干件物品放入一個容量為 V 的背包中,使得在選入背包的物品重量之和,不超過容量V的前提下,讓北歐保重物品的價值之和最大,求最大價值。(1<=n<=20)
輸入格式:
第一行要求給出 N個物品(1<=N<=20),和容量V;
第二行要求給出 N個物品的重量;
第三行要求給出 N個物品的價值。
輸出格式:
輸出物品的最大總價值MAXValue。
輸入樣例:
5 8
3 5 1 2 2
4 5 2 1 3
輸出樣例:
10
直接上代碼。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 const int maxn = 30; 6 int n,v,MAXValue;//物品個數,背包容量 7 int w[maxn] = {0},c[maxn] = {0}; //每件物品的重量為w[i],價值為c[i] 8 9 void DFS(int index, int sumW, int sumC) { 10 if(index == n) { //完成對 n個 物品的選擇---遞歸邊界 11 MAXValue = max(MAXValue,sumC);//更新最大價值MAXValue 12 return ; 13 } 14 if(sumW + w[index] <= v)//“選擇”當前物品 ,不超過背包最大容量時 15 DFS(index+1,sumW + w[index],sumC + c[index]); 16 DFS(index+1,sumW,sumC);//“不選擇”當前物品 17 } 18 int main() { 19 cin>>n>>v; 20 for(int i = 0; i < n; ++i) 21 cin>>w[i]; 22 for(int i = 0; i < n; ++i) 23 cin>>c[i]; 24 DFS(0,0,0);//初始時為第 0件物品、當前總重量和總價值 均為0 25 cout<<MAXValue; 26 return 0; 27 }
運行結果:

