zoukankan      html  css  js  c++  java
  • 混合背包模板(01+多重+完全)

    描述


     

    输入w,v,m.m表示数量,m=-1表示无限多个.

    题解


     

     

     1 #include<cstdio>
     2 #include<algorithm>
     3 using std :: max;
     4 
     5 const int maxn=205,maxw=200005;
     6 int dp[maxw],v[maxn],w[maxn],m[maxn];
     7 int N,W;
     8 
     9 void zero_one(int vi,int wi) { for(int j=W;j>=wi;j--) dp[j]=max(dp[j],dp[j-wi]+vi); }
    10 
    11 void complete(int vi,int wi) { for(int j=wi;j<=W;j++) dp[j]=max(dp[j],dp[j-wi]+vi); } 
    12 
    13 void multy(int i,int vi,int wi,int mi)
    14 {
    15     for(int k=1;k<mi;k*=2)
    16     {
    17         zero_one(k*vi,k*wi);
    18         mi-=k;
    19     }
    20     zero_one(mi*vi,mi*wi);
    21 }
    22 
    23 void solve()
    24 {
    25     for(int i=1;i<=N;i++)
    26     {
    27         if(m[i]==-1) complete(v[i],w[i]);
    28         else if(m[i]==1) zero_one(v[i],w[i]);
    29         else multy(i,v[i],w[i],m[i]);
    30     }
    31     printf("%d
    ",dp[W]);
    32 }
    33 
    34 void init()
    35 {
    36     scanf("%d%d",&N,&W);
    37     for(int i=1;i<=N;i++) scanf("%d%d%d",&w[i],&v[i],&m[i]);
    38 }
    39 
    40 int main()
    41 {
    42     init();
    43     solve();
    44     return 0;
    45 }
  • 相关阅读:
    css3 box-shadow
    JS的Document属性和方法
    简单配色方案web
    ps中参考线的使用技巧
    min-width() ie6
    js 模拟右键菜单
    display:table-cell
    js opener 的使用
    js的 new image()
    CSS 中文字体 Unicode 编码方案
  • 原文地址:https://www.cnblogs.com/Sunnie69/p/5421093.html
Copyright © 2011-2022 走看看