제출 #535336

#제출 시각아이디문제언어결과실행 시간메모리
535336nicolexxuuBank (IZhO14_bank)C++14
52 / 100
1085 ms6836 KiB
#include <bits/stdc++.h>
#define MAXN 21
using namespace std;

int a[MAXN], b[MAXN];
bool possible[MAXN][1 << MAXN];
map<int, vector<int>> combos;
int N, M;

int main() {
	ios_base::sync_with_stdio(0); 
	cin.tie(NULL);
	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";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...