多重背包 POJ 1742

mac2022-06-30  22

#include < iostream > #include < stdio.h > #include < cstring > using namespace std; int a[ 101 ],c[ 101 ]; int num[ 100001 ],f[ 100001 ]; int main(){ int n,m; while (scanf( " %d %d " , & n, & m) != EOF){ if (n == 0 && m == 0 ) break ; int sum = 0 ; for ( int i = 1 ;i <= n;i ++ )scanf( " %d " , & a[i]); for ( int i = 1 ;i <= n;i ++ )scanf( " %d " , & c[i]);memset(f, 0 , sizeof (f));f[ 0 ] = 1 ; for ( int i = 1 ;i <= n;i ++ ){memset(num, 0 , sizeof (num)); for ( int j = a[i];j <= m;j ++ ){ if ( ! f[j] && f[j - a[i]] && num[j - a[i]] < c[i]){num[j] = num[j - a[i]] + 1 ;sum ++ ;f[j] = 1 ;}}}printf( " %d\n " ,sum);} return 0 ;}

转载于:https://www.cnblogs.com/cyiner/archive/2011/05/16/2048250.html

最新回复(0)