hdu 2844 多重背包的二进制优化
来源:互联网 发布:互联网数据库 编辑:程序博客网 时间:2024/05/17 07:09
多重背包解。讲多重背包拆分成完全背包和01背包,01背包部分用二进制优化。
PS:2014年1月19日00:03:06_和poj1742一样 PPS:标记数组改成bool型的。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<set>#include<map>#include<queue>#include<vector>#include<string>#define eps 1e-12#define INF 0x7fffffff#define maxn 1100using namespace std;#define N 300int n,m;int a[N],c[N];int can[111111];void cal(){ for(int i=0;i<n;i++) { if(a[i]*c[i]>=m) { for(int v=a[i];v<=m;v++) can[v]|=can[v-a[i]]; } else { int k=1; int amount=c[i]; while(k<amount) { int tmp=k*a[i]; for(int v=m;v>=tmp;v--) can[v]|=can[v-tmp]; amount-=k; k<<=1; } if(amount) for(int v=m;v>=amount*a[i];v--) can[v]|=can[v-a[i]*amount]; } }}int main(){ while(scanf("%d%d",&n,&m)&&(n|m)) { for(int i=0;i<n;i++) scanf("%d",&a[i]); for(int i=0;i<n;i++) scanf("%d",&c[i]); if(m<0) {printf("0\n");continue;} //一直纳闷为什么不能用下面的初始化,原来是m可能为负数,真坑。 memset(can,0,sizeof(int)*(m+10)); // memset(can,0,sizeof(can)); int ans=0;can[0]=1; cal(); for(int i=1;i<=m;i++) if(can[i]) ans++; printf("%d\n",ans); } return 0;}
4 0
- hdu 2844 多重背包的二进制优化
- hdu 1171 二进制优化的多重背包
- hdu 2844 Coins(多重背包+二进制优化)
- hdu 2844 多重背包二进制优化
- hdu 2844 Coins 多重背包+二进制优化
- hdu 2844 coins (多重背包+二进制优化)
- hdu-2844-Coins (多重背包+二进制优化)
- HDU 2844 Coins(多重背包 + 二进制优化 + 01背包)
- 多重背包的二进制优化
- 多重背包的二进制优化
- 多重背包的二进制优化
- 多重背包的二进制优化
- hdu 2844 Coins 多重背包 二进制优化 算是否能组成的背包
- hdu 2844 Coins(多重背包+二进制优化)
- HDU 2844 Coins (多重背包+二进制优化模板)
- hdu 2844 Coins(dp 多重背包 二进制优化)
- HDU 2844 Coins (二进制优化多重背包)
- HDU 2844 Coins 多重背包(二进制优化)
- iOS多线程开发(三)--Run Loop(一)
- UVa:10056 What is the Probability ?
- 一抹浅笑,秋意浓
- iOS多线程开发(三)--Run Loop(二,三)
- Oracle 里面如何实现只回滚某个事务的一部分内容?
- hdu 2844 多重背包的二进制优化
- iOS多线程开发(三)--Run Loop(四)
- Linux常用命令集合
- iOS多线程开发(四)---线程同步
- 小强的HTML5移动开发之路(15)——HTML5中的音频
- iOS多线程开发(五)---GCD(Grand Central Dispatch)
- iOS移除地图标注大头针
- iOS多线程开发(五)---GCD(二)block && Grand Central Dispatch
- 运用EnvDTE获取Visual Studio实例并动态修改解决方案和项目