码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2019-01-12 18:31:46      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:space   col   string   mes   模型   size   题意   amp   main   

题意:多重背包模型  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 多重背包二进制优化

标签:space   col   string   mes   模型   size   题意   amp   main   

原文地址:https://www.cnblogs.com/ttttttttrx/p/10260531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!