Submission #535330

#TimeUsernameProblemLanguageResultExecution timeMemory
535330nicolexxuuBank (IZhO14_bank)C++14
0 / 100
2 ms980 KiB
#include <bits/stdc++.h> #define MAXN 21 using namespace std; int a[MAXN], b[MAXN]; bool possible[MAXN][1 << MAXN]; vector<int> combos[MAXN * 1000]; int N, M; int main() { cin >> N >> M; for(int i = 0; i < N; i++) cin >> a[i]; for(int i = 0; i < M; i++) cin >> b[i]; for(int mask = 0; mask < (1 << M); mask++) { int sum = 0; for(int i = 0; i < M; i++) { if(mask & (1 << i)) sum += b[i]; } combos[sum].push_back(mask); } possible[0][0] = true; for(int i = 0; i < N; i++) { for(int mask = 1; mask < (1 << M); mask++) { for(int combo : combos[a[i]]) { if(combo & mask == combo) possible[i+1][mask] |= possible[i][mask - combo]; } } } bool res = false; for(int i = 0; i < (1 << M); i++) res |= possible[N][i]; if(res) cout << "YES\n"; else cout << "NO\n"; }

Compilation message (stderr)

bank.cpp: In function 'int main()':
bank.cpp:27:21: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   27 |     if(combo & mask == combo) possible[i+1][mask] |= possible[i][mask - combo];
      |                ~~~~~^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...