Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.62 KB | None | 0 0
  1. #include <cstdio>
  2.  
  3. typedef long long llint;
  4.  
  5. llint dp[ 1 << 16 ];
  6. int w[ 16 ];
  7.  
  8. int main( void )
  9. {
  10.    int N, M, K;
  11.    scanf( "%d%d%d", &N, &M, &K );
  12.  
  13.    int tot = 0;
  14.  
  15.    for( int i = 0; i < K; ++i ) {
  16.       scanf( "%d", w+i );
  17.       tot += w[i];
  18.    }
  19.  
  20.    dp[(1<<K)-1] = ( tot == N*M );
  21.    
  22.    for( int i = (1<<K)-2; i >= 0; --i ) {
  23.       dp[i] = 0; int r = 0;
  24.  
  25.       for( int j = 0; j < K; ++j )
  26.      if( (( i >> j )&1) ) r += w[j];
  27.  
  28.       r = M-(r%M);
  29.  
  30.       for( int j = 0; j < K; ++j )
  31.      if( !(( i >> j )&1) && w[j] <= r )
  32.         dp[i] += dp[i|(1<<j)];
  33.    }
  34.  
  35.    printf( "%lld\n", dp[0] );
  36.  
  37.    return 0;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement