• 背包模板


     1 //每件物品只能使用一次
     2 void onezeropack(int v,int c)
     3 {
     4     int j;
     5     for(j=val; j>=v; j--)
     6     {
     7         f[j]=max(f[j-v]+c,f[j]);
     8     }
     9 }
    10 //每件物品可以无限使用
    11 void completepack(int v,int c)
    12 {
    13     int j;
    14     for(j=v; j<=val; j++)
    15     {
    16         f[j]=max(f[j-v]+c,f[j]);
    17     }
    18 }
    19 //每件物品有限次使用
    20 void multiplepack(int v,int c,int num)
    21 {
    22     if(v*num>=val)
    23     {
    24         completepack(v,c);
    25         return;
    26     }
    27     int k=1;
    28     while(k<num)
    29     {
    30         onezeropack(k*v,k*c);
    31         num=num-k;
    32         k=k*2;
    33     }
    34     onezeropack(num*v,num*c);
    35 }

    注意 : 背包的第一重循环要自己写

    for(int i = 0 ;i < n ; i++)  

    调用其中一个函数

    f[N]为dp数组

     1 #define N 100005  
     2 int m,f[N];  
     3 int Max(int a,int b)  
     4 {  
     5     return a>b?a:b;  
     6 }  
     7 void Zeroone(int c,int w)          // 01背包  
     8 {  
     9     int i;  
    10     for(i=m;i>=c;i--)  
    11         f[i]=Max(f[i],f[i-c]+w);  
    12 }  
    13 void Comple(int c,int w)       //完全背包  
    14 {  
    15     int i;  
    16     for(i=c;i<=m;i++)  
    17         f[i]=Max(f[i],f[i-c]+w);  
    18 }  
    19 void Multi(int c,int w,int num)     //多重背包  
    20 {  
    21     if(c*num>=m)  
    22         Comple(c,w);  
    23     else  
    24     {  
    25         int i=1;           //二进制思想,用一些数表示所有可能的组合。  
    26         while(i<num)  
    27         {  
    28             Zeroone(i*c,i*w);  //如num=13,可以用1,2,4,6表示所有组合  
    29             num-=i;  
    30             i*=2;  
    31         }  
    32         Zeroone(c*num,w*num);  
    33     }  
    34 }  
  • 相关阅读:
    终端提示符路径长度设置
    linux ssh服务器
    kail-linux my need
    elasticsearch的marvel
    VPS折腾
    Ubuntu 系统密码相关问题
    Pycharm 使用配置
    python集成开发工具
    Codeforces Round #554 (Div. 2) 选做
    Codeforces Forethought Future Cup Elimination Round 选做
  • 原文地址:https://www.cnblogs.com/shanyr/p/4674667.html
Copyright © 2020-2023  润新知