Dev C++写01背包程序


大家来看看我用C++写01背包程序

1、先看题目

(1)题目描述


有1个容量为m的背包,现有n种物品,重量分别为w1,w2…wn,价值分别为v1,v….vn,若每种物品只有1件,求能放入的最大总价值。

(2)输入描述

第1行,两个整数m(m<=200)和n(n<=30)。

第2行到最后,每行两个整数wi和vi

(3)输出描述

一个数据,最大总价值

(4)样例输入

20 7
2 1
3 3
4 5
7 9
5 7
1 3
1 9

(5)样例输出

34

2、正确代码

 1 #include
 2 using namespace std;
 3 
 4 int main(){
 5     int N;
 6     int W;
 7     int w[30]={0};
 8     int v[30]={0};
 9     int k,C;
10     int p;
11     int B[30][200] = {0}; 
12     cin>>W>>N;
13     for(p=1;p1;p++){
14         cin>>w[p] >>v[p];
15     }
16         for(k=1;k1;k++){
17             for(C = 1;C < W+1;C++){
18                 if(w[k] > C){
19                     B[k][C] = B[k-1][C];
20                 }
21                 else{
22                     int value1 = B[k-1][C-w[k]] + v[k];
23                     int value2 = B[k-1][C];
24                     if(value1 > value2){
25                         B[k][C] = value1;
26                     }
27                     else{
28                         B[k][C] = value2;
29                     }
30                 }
31             }
32         }    
33         cout<endl;
34     return 0;
35 }

3、验证

使用DEV c++ 运行

(1)完成样例输入

 (2)完成样例输出

 结束End