Submission #1319231

#TimeUsernameProblemLanguageResultExecution timeMemory
1319231tkm_algorithmsBank (IZhO14_bank)C++20
100 / 100
322 ms11200 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
//#define int ll
using P = pair<int, int>;
#define all(x) x.begin(), x.end()
#define rep(i, l, n) for (int i = l; i < (n); ++i)
#define sz(x) (int)x.size()
const char nl = '\n';
const int mod = 1e9+7;
const int N = 20;

int sum[1<<N], vis[1<<N];

void solve() {
	int n, m; cin >> n >> m;
	vector<int> a(n), b(m);
	for (auto &i: a)cin >> i;
	for (auto &i: b)cin >> i;
	
	rep(i, 1, (1<<m))
		rep(j, 0, m)
			if (i&(1<<j))sum[i] += b[j];
	
	vector<int> g[n];
	rep(i, 0, n)
		rep(j, 1, (1<<m))
			if (sum[j] == a[i])g[i].push_back(j);

	vector<int> l = g[0];
	
	rep(i, 1, n) {
		vector<int> nw;
		for (auto j: l)
			for (auto k: g[i])if (!(k&j) && !vis[k|j])nw.push_back(k|j), vis[k|j] = 1;
		l = nw;
		memset(vis, 0, sizeof vis);
	}
	
	cout << (sz(l)?"YES":"NO") << nl;
}

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    solve();
    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...