P01P02P03各种背包!!

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 ) ;
}

posted @ 2013-03-29 07:19  码代码的猿猿  阅读(127)  评论(0编辑  收藏  举报