제출 #535330

#제출 시각아이디문제언어결과실행 시간메모리
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";
}

컴파일 시 표준 에러 (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...