Submission #798853

#TimeUsernameProblemLanguageResultExecution timeMemory
798853SanguineChameleonBank (IZhO14_bank)C++17
100 / 100
152 ms19424 KiB
#include <bits/stdc++.h>
using namespace std;

const int maxN = 20;
const int maxA = 1e3 + 20;
int A[maxN];
int B[maxN];
vector<int> masks[maxA];
bool flag[maxN][1 << maxN];
int N, M;

void backtrack(int pos, int cur) {
	if (pos == N) {
		cout << "YES";
		exit(0);
	}
	if (flag[pos][cur]) {
		return;
	}
	flag[pos][cur] = true;
	for (auto mask: masks[A[pos]]) {
		if (!(cur & mask)) {
			backtrack(pos + 1, cur | mask);
		}
	}
}

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 >> i) & 1) {
				sum += B[i];
			}
		}
		if (sum < maxA) {
			masks[sum].push_back(mask);
		}
	}
	backtrack(0, 0);
	cout << "NO";
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...