代码:
#include<bits/stdc++.h>
#define ll long long
#define Inf -0x3f3f3f3f3f3f3f3f
using namespace std;
const ll M=1e6+9,N=1e3+9;
ll n,m,cnt,dp[M],nw[N],nnum[N],w[M];
inline void query()
{
cin>>n>>m;if(n==0 && m==0) return;
memset(dp,0,sizeof(dp));cnt=0;
for(int i=1;i<=n;i++) cin>>nw[i];
for(int i=1;i<=n;i++) cin>>nnum[i];
for(int i=1;i<=n;i++)
{
ll tmp=0;
for(int j=1;j*2<=nnum[i];j*=2)
w[++cnt]=nw[i]*j,tmp+=nw[i]*j;
if(tmp!=nnum[i]) w[++cnt]=nw[i]*(nnum[i]-tmp);
}
//for(int i=1;i<=cnt;i++)
// cout<<w[i]<<endl;
dp[0]=1;
for(int i=1;i<=cnt;i++)
for(int j=m;j>=w[i];j--)
if(dp[j-w[i]]!=-1)
dp[j]|=dp[j-w[i]];
ll sum=0;
for(int i=1;i<=m;i++)
if(dp[i]) sum++;
cout<<sum<<endl;
}
int main()
{
while(1)
{
query();
if(n==0 && m==0) break;
}
return 0;
}
全部RE(虽然总共就1个点)