int dp[N];
void OneZeroPack( int v , int c , int w ){//01背包
for( int i = v ; i >= c ; i-- )
dp = max( dp , dp[i-c] +w ) ;
}
void CompletePack( int v , int c , int w ){//完全背包
for( int i = c ; i <= v ; i++ )
dp = max( dp , dp[i-c] +w ) ;
}
void MultipliePack( int v , int c, int w , int n){//多重背包
if( n*c >= v ){
CompletePack( v , c , w ) ;
return ;
}
int k = 1 ;
while( k < n ){
OneZeroPack( v , k*c , k*w ) ;
n -= k ;
k <<= 1 ;
}
OneZeroPack( v , n*c , n*w ) ;
}