Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- typedef long long llint;
- llint dp[ 1 << 16 ];
- int w[ 16 ];
- int main( void )
- {
- int N, M, K;
- scanf( "%d%d%d", &N, &M, &K );
- int tot = 0;
- for( int i = 0; i < K; ++i ) {
- scanf( "%d", w+i );
- tot += w[i];
- }
- dp[(1<<K)-1] = ( tot == N*M );
- for( int i = (1<<K)-2; i >= 0; --i ) {
- dp[i] = 0; int r = 0;
- for( int j = 0; j < K; ++j )
- if( (( i >> j )&1) ) r += w[j];
- r = M-(r%M);
- for( int j = 0; j < K; ++j )
- if( !(( i >> j )&1) && w[j] <= r )
- dp[i] += dp[i|(1<<j)];
- }
- printf( "%lld\n", dp[0] );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement