Cash Machine POJ - 1276 多重背包二进制优化

Posted ttttttttrx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cash Machine POJ - 1276 多重背包二进制优化相关的知识,希望对你有一定的参考价值。

题意:多重背包模型  n种物品 每个m个  问背包容量下最多拿多少 这里要用二进制优化不然会超时

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=100000+10;
 6 int dp[maxn];
 7 int w[500],c[50];
 8 int main(){
 9     
10     int n,m,maxnum;
11     while(cin>>maxnum>>n){
12         int a,b;
13         int num=1;
14         for(int i=1;i<=n;i++){
15             scanf("%d%d",&a,&b);
16         
17         for(int j=1;j<=a;j<<=1){
18            w[num++]=j*b;
19            a-=j;
20         }
21         if(a>0)w[num++]=a*b;
22     }
23     memset(dp,0,sizeof(dp));
24     for(int i=1;i<num;i++)
25         for(int j=maxnum;j>=w[i];j--){
26                 if(j-w[i]>=0)
27                 dp[j]=max(dp[j],dp[j-w[i]]+w[i]);
28         }
29     cout<<dp[maxnum]<<endl;
30     }
31     }

 

以上是关于Cash Machine POJ - 1276 多重背包二进制优化的主要内容,如果未能解决你的问题,请参考以下文章

POJ1276Cash Machine

poj1276 Cash Machine(完全背包模板题)

POJ 1276 Cash Machine(完全背包模板题)

poj 1276 Cash Machine(多重背包)

POJ-1276 Cash Machine 多重背包 二进制优化

POJ 1276 Cash Machine(多重背包的二进制优化)