#include<iostream>
#include<cstring>
using namespace std;
int str[105],str2[105];
int n,m;
int f[100005],use[100005];
int main()
{
while(cin>>n>>m&&(n+m))
{
for(int i=0;i<n;i++)cin>>str[i];//用来存放硬币的价值
for(int i=0;i<n;i++)cin>>str2[i];//用来存放硬币相应的的个数
memset(f,0,sizeof(f));
f[0]=1;long long ans=0;
for(int i=0;i<n;i++)//从0~n分别枚举
{
memset(use,0,sizeof(use));//每次进行初始化
for(int j=str[i];j<=m;j++ )
{ //f[j]为0表示当前值没有被访问过 f[j-str[i]]存在意味着当前价值j可以由 j-str[i] + str[i] 得到
if(!f[j]&&f[j-str[i]]&&use[j-str[i]]+1<=str2[i])//use数组判断使用次数小于等于给定次数 即还可以再用这个数
{f[j]=1;//访问过
use[j]=use[j-str[i]]+1;//使用次数加一
ans++;//种数加一 统计的其实就是f[j]=1的情况数
} }
}
cout<<ans<<endl;
}
}
POJ 1742 coins
最新推荐文章于 2020-05-19 12:34:42 发布