zoukankan      html  css  js  c++  java
  • 【背包】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 }

      

  • 相关阅读:
    判断是否是微信浏览器
    弹性盒模型
    一个发光的搜索边框(纯CSS3)
    小练习
    js控制div是否显示
    遮罩弹窗
    布局
    CSS构造表单
    CSS 滤镜(IE浏览器专属其他浏览器不支持)
    Css中光标,DHTML,缩放的使用
  • 原文地址:https://www.cnblogs.com/duye/p/8681516.html
Copyright © 2011-2022 走看看