• POJ1742----Coins


    背包专题:http://www.cnblogs.com/qq188380780/p/6409474.html

     1 //多重背包
     2 #include<cstdio>
     3 int b[100005],a[100005][2];
     4 int Room,ans;
     5 
     6 void init()
     7 {
     8     b[0] = 1;
     9     for(int i=1; i<=Room; ++i)
    10         b[i] = 0;
    11     ans = 0;
    12 }
    13 
    14 void zero_one_bag(int v)
    15 {
    16     for(int i=Room; i>=v; --i)
    17         if(!b[i] && b[i-v])
    18         {
    19             ++ans;
    20             b[i] = 1;
    21         }
    22 }
    23 
    24 void complete_bag(int v)
    25 {
    26     for(int i=v; i<=Room; ++i)
    27         if(!b[i] && b[i-v])
    28         {
    29             ++ans;
    30             b[i] = 1;
    31         }
    32 }
    33 
    34 void multiple_bag(int v,int n)
    35 {
    36     if(n*v >= Room)
    37         complete_bag(v);
    38     else
    39     for(int i=1; i<n; i*=2)
    40     {
    41         zero_one_bag(i*v);
    42         n -= i;
    43     }
    44     zero_one_bag(n*v);
    45 }
    46 
    47 int main()
    48 {
    49     int n,s;
    50     while(~scanf("%d%d",&n,&Room) && n+Room)
    51     {
    52         for(int i=0; i<2; ++i)
    53             for(int j=0; j<n; ++j)
    54                 scanf("%d",&a[j][i]);
    55         init();
    56         for(int i=0; i<n; ++i)
    57             multiple_bag(a[i][0],a[i][1]);
    58         printf("%d
    ",ans);
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    BZOJ1409 : Password
    BZOJ2862 : 分糖果
    BZOJ2093 : [Poi2010]Frog
    BZOJ2506 : calc
    BZOJ3290 : Theresa与数据结构
    BZOJ1397 : Ural 1486 Equal squares
    BZOJ2789 : [Poi2012]Letters
    BZOJ3417 : Poi2013 Tales of seafaring
    BZOJ3251 : 树上三角形
    BZOJ3262 : 陌上花开
  • 原文地址:https://www.cnblogs.com/qq188380780/p/6817737.html
Copyright © 2020-2023  润新知