背包0-1背包与完全背包一维数组实现

Posted pigcv

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了背包0-1背包与完全背包一维数组实现相关的知识,希望对你有一定的参考价值。

背包问题很经典了,《背包问题九讲》讲的非常详细,建议看一看。

在这里,我想给出0-1背包和完全背包压缩空间后的实现,即只要一维数组。

0-1背包,与完全背包仅仅只是内循环的次序不同,故而代码基本相同。

希望可以帮的上你。

0-1背包:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int f[1001];
 4 int w[1001]; 
 5 int v[1001];
 6 int main(){
 7     int n;
 8     int W;
 9     cin>>n>>W;
10     for(int i = 1;i<=n;i++){
11         cin>>w[i]>>v[i];
12     }
13     memset(f,-10000000,sizeof(f));
14     for(int i = 1;i<=n;i++){
15         for(int j = W;j>=0;j--){
16             f[j] = max(f[j],f[j-w[i]]+v[i]);
17         }
18     }
19     int max = 0;
20     for(int i = 1;i<=n;i++){
21         if(f[i]>max){
22             max = f[i];
23         }
24     }
25     printf("%d",max);
26 }


完全背包:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int f[1001];
 4 int w[1001]; 
 5 int v[1001];
 6 int main(){
 7     int n;
 8     int W;
 9     cin>>n>>W;
10     for(int i = 1;i<=n;i++){
11         cin>>w[i]>>v[i];
12     }
13     memset(f,-10000000,sizeof(f));
14     for(int i = 1;i<=n;i++){
15         for(int j = 0;j<=W;j++){
16             f[j] = max(f[j],f[j-w[i]]+v[i]);
17         }
18     }
19     int max = 0;
20     for(int i = 1;i<=n;i++){
21         if(f[i]>max){
22             max = f[i];
23         }
24     }
25     printf("%d",max);
26 }

 

  

以上是关于背包0-1背包与完全背包一维数组实现的主要内容,如果未能解决你的问题,请参考以下文章

#1043 : 完全背包

动态规划第五篇:01背包问题和完全背包问题

动态规划第五篇:01背包问题和完全背包问题

DP背包问题小结(01背包,完全背包,需恰好装满或不需,一维DP二维DP)

dp之完全背包 hdu--2159一维数组做法

完全背包 P1679 神奇的四次方数