#include<stdio.h>
int dp[100010];
int A[105];//钱币价值
int C[105];//对应钱币的数量
int main(void)
{
int n,m,i,j,ans=0;
while((~scanf("%d%d",&n,&m))&&(n+m)!=0)
{
ans=0;
memset(dp,-1,sizeof(dp));
dp[0]=0;
for(i=0;i<n;i++)
scanf("%d",&A[i]);
for(i=0;i<n;i++)
scanf("%d",&C[i]);
for(i=0;i<n;i++)// i代表使用前i种纸币
{
for(j=0;j<=m;j++) //j代表使用纸币后,可以达到的钱数
{
if(dp[j]>=0) //if(dp[i+1][j]>=0)
dp[j]=C[i]; // dp[i+1][j]=C[i];
else // else
if(j<A[i]||dp[j-A[i]]<=0) // if(j<A[i]||dp[i+1][j-A[i]]<=0)
dp[j]=-1; // dp[i+1][j]=-1;
else //else
dp[j]=dp[j-A[i]]-1; // dp[i+1][j]=dp[i+1][j-A[i]]-1;
} //2维数组简化为一维
}
for(i=0;i<=m;i++)
{
if(dp[i]>=0)
ans++;
}
printf("%d\n",ans-1);
}
}
poj1742(背包问题)
最新推荐文章于 2022-11-18 14:26:43 发布