楼天城男人八题之一
直接多重背包居然没有超时
#include<bits/stdc++.h>
using namespace std;
int a[120],c[120];
int dp[100020],use[100020];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2&&n&&m)
{
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
scanf("%d",&c[i]);
dp[0]=1;
int ans=0;
for(int i=1;i<=n;i++)
{
memset(use,0,sizeof(use));
for(int j=a[i];j<=m;j++)
{
if(dp[j]==0&&dp[j-a[i]]==1&&use[j-a[i]]<c[i])
{
dp[j]=1;
use[j]=use[j-a[i]]+1;
ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}