zoukankan      html  css  js  c++  java
  • 动态规划 四.0-1背包问题

     1 #include<iostream>
     2 #include<string.h>
     3 using namespace std;
     4 #define maxi 81
     5 #define maxj 81
     6 
     7 void knapsack(int n,int W,int *w,int *v,int c[][maxj])
     8 {
     9 /*    for(int i=0;i<=W;i++)
    10     c[0][i]=0;*/
    11     for(int i=1;i<=n;i++)
    12     {
    13     //    c[i][0]=0;
    14         for(int k=1;k<=W;k++)
    15         {
    16             if(w[i]<=k)
    17             {
    18                 if(c[i-1][k]<v[i]+c[i-1][k-w[i]])
    19                 c[i][k]=v[i]+c[i-1][k-w[i]];
    20                 else c[i][k]=c[i-1][k];
    21             }
    22             else c[i][k]=c[i-1][k];
    23         }
    24     }
    25 }
    26 
    27 void output(int n,int W,int c[][maxj],int *w)
    28 {
    29     int x[n],t=W;
    30     memset(x,0,sizeof(x));
    31     for(int i=n;i>0;i--)
    32     {
    33         if(c[i][W]==c[i-1][W])
    34         x[i]=0;
    35         else 
    36         {
    37             x[i]=1;
    38             W-=w[i];
    39         }
    40     }
    41     
    42     //如果 c[i][W]==c[i-1][W],表示当前物品并未放入背包,从c[i-1][W]继续构造最优解,否则从c[i-1][W-w[i]]继续构造最优解; 
    43     for(int i=1;i<=n;i++)
    44     {
    45         if(x[i]==1)
    46         cout<<i<<" ";
    47     }
    48     cout<<c[n][t];
    49     cout<<endl;
    50 }
    51 
    52 int main()
    53 {
    54     int n,W,w[maxi],v[maxi];//w是权重,v是价值
    55     int c[maxi][maxj]; //当前位置的最大价值和   
    56     cin>>n>>W;    //n代表物品的种类,W代表背包总容量
    57     memset(c,0,sizeof(c));
    58     
    59     for(int i=1;i<=n;i++)
    60     cin>>w[i]>>v[i];
    61     
    62     knapsack(n,W,w,v,c);
    63     
    64     for(int i=0;i<=n;i++)
    65     {
    66         for(int j=0;j<=W;j++)
    67         cout<<c[i][j]<<" ";
    68         cout<<endl;
    69     }
    70     
    71     output(n,W,c,w);
    72     return 0; 
    73  } 

  • 相关阅读:
    XML文件详解以及解析
    Delphi 泛型详解
    Delphi 修改本地日期和时间
    java -> this关键字
    java ->super关键字
    Java -> 构造器(构造方法)
    java -> 方法的重载
    java面向对象->多态
    Java面向对象->接口
    Java面向对象->抽象类
  • 原文地址:https://www.cnblogs.com/yuanqingwen/p/12760150.html
Copyright © 2011-2022 走看看