第一次遇到这样的题,平分= =,还要回去好好想一下...
这么水的... 不懂啊= =
#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
int main()
{
int n,m;
int a[101],c[101];
int DP[100001];
while( scanf( "%d %d",&n,&m )!=EOF )
{
if( n==0 && m==0 )
break;
for( int i=1;i<=n;i++ )
scanf( "%d",&a[i] );
for( int i=1;i<=n;i++ )
scanf( "%d",&c[i] );
for( int i=0;i<=m;i++ )
DP[i]=0;
DP[0]=1;
for( int i=1;i<=n;i++ )
for( int j=0;c[i];j++ )
{
if( c[i]>(1<<j) )
{
for( int k=m;k>=a[i]*(1<<j);k-- )
if( DP[k-a[i]*(1<<j)] )
DP[k]=1;
c[i]-=(1<<j);
}
else
{
for( int k=m;k>=a[i]*c[i];k-- )
if( DP[k-a[i]*c[i]] )
DP[k]=1;
c[i]=0;
}
}
int sum=0;
for( int i=1;i<=m;i++ )
sum+=DP[i];
printf( "%d\n",sum );
}
return 0;
}