zoukankan      html  css  js  c++  java
  • 蒟蒻吃药计划-治疗系列 #round4 多重背包+混合背包代码存放

     1 #include <bits/stdc++.h>
     2 #define fp(i,l,r) for(register int i=(l);i<=(r);++i)
     3 #define fd(i,l,r) for(register int i=(l);i>=(r);--i)
     4 using namespace std;
     5 int v[1000+20],w[1000+20],s[1000+20];
     6 int dp[1000+20];
     7 int n,m;
     8 inline int botposs(int a,int b,int pd){
     9     if(pd==1) return a>b?a:b;
    10     if(pd==0) return a<b?a:b;
    11 }
    12 int main(){
    13     scanf("%d%d",&n,&m);
    14     fp(i,1,n){
    15         scanf("%d%d%d",&v[i],&w[i],&s[i]);
    16     }
    17     fp(i,1,n){
    18         fd(j,m,0){
    19             fp(k,0,s[i]){
    20                 if(j-k*v[i]<0){
    21                     break;
    22                 }
    23                 dp[j]=botposs(dp[j],dp[j-k*v[i]]+k*w[i],1);
    24             }
    25         }
    26     }
    27     printf("%d",dp[m]);
    28     return 0;
    29 }
    多重背包(空间优化O(v))
     1 #include <bits/stdc++.h>
     2 #define fp(i,l,r) for(register int i=(l);i<=(r);++i)
     3 #define fd(i,l,r) for(register int i=(l);i>=(r);--i)
     4 using namespace std;
     5 int v[1000+20],w[1000+20];
     6 int dp[1000+20];
     7 int n,m,n1;
     8 inline int botposs(int a,int b,int pd){
     9     if(pd==1) return a>b?a:b;
    10     if(pd==0) return a<b?a:b;
    11 }
    12 int main(){
    13     scanf("%d%d",&n,&m);
    14     int x,y,s,t=1;
    15     fp(i,1,n){ 
    16         scanf("%d%d%d",&x,&y,&s);
    17         while(s>=t){
    18             v[++n1]=x*t;
    19             w[n1]=y*t;
    20             s-=t;
    21             t*=2;
    22         }
    23         v[++n1]=x*s;
    24         w[n1]=y*s;
    25     }
    26     fp(i,1,n1){
    27         fd(j,m,v[i]){
    28             dp[j]=botposs(dp[j],dp[j-v[i]]+w[i],1);
    29         }
    30     }
    31     printf("%d",dp[m]);
    32     return 0;
    33 }
    多重背包(终极优化)

    (其实不是很终极辣)

     1 #include <bits/stdc++.h>
     2 #define fp(i,l,r) for(register int i=(l);i<=(r);++i)
     3 #define fd(i,l,r) for(register int i=(l);i>=(r);--i)
     4 using namespace std;
     5 int c[1000+20],w[1000+20],p[1000+20];
     6 int dp[1000+20];
     7 int n,m,n1;
     8 inline int botposs(int a,int b,int pd){
     9     if(pd==1) return a>b?a:b;
    10     if(pd==0) return a<b?a:b;
    11 }
    12 int main(){
    13     scanf("%d%d",&m,&n);
    14     fp(i,1,n){
    15         scanf("%d%d%d",&w[i],&c[i],&p[i]);
    16     }
    17     fp(i,1,n){
    18         if(p[i]==0){
    19             fp(j,w[i],m){
    20                 dp[j]=botposs(dp[j],dp[j-w[i]]+c[i],1);
    21             }
    22         }
    23         else{
    24             fp(j,1,p[i]){
    25                 fd(k,m,w[i]){
    26                     dp[k]=botposs(dp[k],dp[k-w[i]]+c[i],1);
    27                 }
    28             }
    29         }
    30     }
    31     printf("%d",dp[m]);
    32     return 0;
    33 }
    混合背包(没啥好优化的)
  • 相关阅读:
    Install JDK In Ubuntu
    js初学—实现checkbox全选功能
    js初学—js全自定义单选框
    poj1679The Unique MST(次小生成树模板)
    hdu3486Interviewe(二分是错的)(ST算法RMQ + 判定上下界枚举)
    poj3974 Palindrome(Manacher最长回文)
    poj1734 Sightseeing trip(Floyd求无向图最小环)
    BZOJ1123 [POI2008]BLO(割点判断 + 点双联通缩点size)
    2.2 logistic回归
    神经网络的火热
  • 原文地址:https://www.cnblogs.com/Fraction/p/BagTellingTwo.html
Copyright © 2011-2022 走看看