【背包】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 }
复制代码

 

  

posted @   pigcv  阅读(537)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示