第一次遇到这样的题,平分= =,还要回去好好想一下...
这么水的... 不懂啊= =
#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;
}