hdu 2844 多重背包二进制优化
2014-03-07 20:33
190 查看
//http://www.cnblogs.com/devil-91/archive/2012/05/16/2502710.html
#include<stdio.h>
#define N 110000
#include<string.h>
int dp
;
int main() {
int n,m,i,j,a
,b
,k,h;
while(scanf("%d%d",&n,&m),n||m) {
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
scanf("%d",&b[i]);
dp[0]=1;
for(i=1;i<=n;i++) {
if(b[i]*a[i]>=m) {
for(j=a[i];j<=m;j++) {
if(dp[j-a[i]]==0)continue;
dp[j]=1;
}
}
else {
k=b[i];
h=1;
while(k>=h) {
for(j=m;j>=h*a[i];j--) {
if(dp[j-h*a[i]]==0)continue;
dp[j]=1;
}
k-=h;h*=2;
}
if(k>0) {
for(j=m;j>=k*a[i];j--) {
if(dp[j-k*a[i]]==0)continue;
dp[j]=1;
}
}
}
}
j=0;
for(i=1;i<=m;i++)
if(dp[i]==1)
j++;
printf("%d\n",j);
}
return 0;
}
#include<stdio.h>
#define N 110000
#include<string.h>
int dp
;
int main() {
int n,m,i,j,a
,b
,k,h;
while(scanf("%d%d",&n,&m),n||m) {
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
scanf("%d",&b[i]);
dp[0]=1;
for(i=1;i<=n;i++) {
if(b[i]*a[i]>=m) {
for(j=a[i];j<=m;j++) {
if(dp[j-a[i]]==0)continue;
dp[j]=1;
}
}
else {
k=b[i];
h=1;
while(k>=h) {
for(j=m;j>=h*a[i];j--) {
if(dp[j-h*a[i]]==0)continue;
dp[j]=1;
}
k-=h;h*=2;
}
if(k>0) {
for(j=m;j>=k*a[i];j--) {
if(dp[j-k*a[i]]==0)continue;
dp[j]=1;
}
}
}
}
j=0;
for(i=1;i<=m;i++)
if(dp[i]==1)
j++;
printf("%d\n",j);
}
return 0;
}
相关文章推荐
- hdu 2844 Coins (多重背包+ 二进制优化)
- HDU-2844 Coins 多重背包 物品数量二进制优化
- DP(分组背包两种二进制优化) Problem S:Coins(HDU 2844)
- HDU 2844 Coins (二进制优化多重背包)
- HDU 2844 Coins 多重背包(二进制优化)
- HDU-2844(多重背包中二进制优化)
- hdu 2844 多重背包的二进制优化
- HDU 2844 Coins(多重背包 + 二进制优化 + 01背包)
- hdu 2844 Coins(多重背包+二进制优化)
- HDU 2844 Coins (多重背包+二进制优化)
- hdu 2844 Coins(多重背包+二进制优化)
- HDU 2844+POJ 1014 +FZU 1432详解(多重背包&&二进制优化)
- Coins (HDU_2844) 二进制优化+多重背包
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
- HDU 2844 Coins(多重背包【二进制优化】)
- hdu 2844 Coins 多重背包 二进制优化 算是否能组成的背包
- hdu 2844 Coins(多重背包+二进制优化)
- hdu 2844 多重背包二进制优化
- hdu 2844 Coins(dp 多重背包 二进制优化)
- hdu 2844 Coins 多重背包模板题 ,二进制优化。据说是楼教主的男人八题之一