多重背包之四

#include<iostream>            //poj 1742 Coins
using namespace std;
int v[105],c[105],b[100005][2];
int main()
{
int n,m,i,j,count,num;
while(scanf("%d%d",&n,&m),n&&m)
{
memset(b,
0,sizeof(b));
for(i=1;i<=n;i++)
scanf(
"%d",&v[i]);
for(i=1;i<=n;i++)
scanf(
"%d",&c[i]);
b[
0][0]=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
b[j][
1]=0;
for(j=v[i];j<=m;j++)
if(b[j][0]==0)
{
num
=j-v[i];
if(b[num][0]!=0&&b[num][1]<c[i])
{
b[j][
0]=1; //b[j][0]=1表示硬币价值之和可以为j
b[j][1]=b[num][1]+1; //b[j][1]表示硬币价值之和达到j时,当前的第i种硬币用了多少次
}
}
}
count
=0;
for(i=1;i<=m;i++)
{
if(b[i][0]!=0)
count
++;
}
printf(
"%d\n",count);
}
return 0;
}

  

posted on 2011-08-22 12:22  sysu_mjc  阅读(92)  评论(0编辑  收藏  举报

导航