揹包問題-徹底揹包

  有N種物品和一個容量爲V的揹包,每種物品都有無限件可用。第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可以使這些物品的體積總和不超過揹包容量,且價值總和最大。c++

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int num = ???;
 5 int t, n, m;
 6 int w[num], v[num];
 7 int dp[num];
 8 
 9 int fullans(){
10     //初始化 
11     for(int i=0; i<num; ++i)    dp[i] = 0; 
12      
13     for(int i=1; i<=n; ++i)//第i個物品 
14         for(int j=w[i]; j<=m; ++j)//j爲體積 !!順序 
15             dp[j] = max(dp[j], dp[j-w[i]]+v[i]);
16      
17     return dp[m];    
18 }
19 
20 int main(){
21     scanf("%d", &t);
22     while(t--){
23         scanf("%d %d", &n, &m);
24         for(int i=1; i<=n; ++i)        scanf("%d", w+i);
25         for(int i=1; i<=n; ++i)        scanf("%d", v+i);
26         printf("%d\n",fullans());
27     }
28     return 0;
29 }
相關文章
相關標籤/搜索