Submission #1235941

#TimeUsernameProblemLanguageResultExecution timeMemory
1235941lanaskaricaBank (IZhO14_bank)C++20
100 / 100
358 ms54876 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long 
#define pii pair <int, int>
#define fi first
#define se second

const int MAXN = 25, POT = (1 << 20) + 5;

bool bl;
int n, arr[MAXN], br[MAXN], dp[MAXN][POT];

vector <int> v[MAXN];

void rek(int idx, int mask) {
	if (idx == n) {bl = 1; return;}
	if (mask == 0) return;
	
	for (auto e : v[idx]) {
		if ((mask & e) != e || dp[idx][(mask ^ e)] == 1) continue;
		dp[idx][(mask ^ e)] = 1;
		rek(idx + 1, (mask ^ e));
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	int m;
	cin >> n >> m;
	
	for (int i = 0; i < n; i++) cin >> arr[i];
	for (int i = 0; i < m; i++) cin >> br[i];
	
	for (int mask = 0; mask < (1 << m); mask++) {
		int zb = 0;
		for (int j = 0; j < m; j++) {
			if (mask & (1 << j)) zb += br[j];
		}
		for (int j = 0; j < n; j++) {
			if (zb == arr[j]) v[j].push_back(mask);
		}
	}
	
	bl = 0;
	rek(0, (1 << m) - 1);
	
	if (bl == 1) cout << "YES\n";
	else cout << "NO\n";
	
	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...