Submission #1277852

#TimeUsernameProblemLanguageResultExecution timeMemory
1277852alahunovahmadBank (IZhO14_bank)C++20
100 / 100
373 ms182884 KiB
#include<bits/stdc++.h>
#define int  long long
using namespace std;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n, m;
	cin >> n >> m;
	int a[n], b[m];
	for (int i = 0; i < n; i++) cin >> a[i];
	for (int i = 0; i < m; i++) cin >> b[i];
	
	vector<vector<int>> sum(1001);
	for (int p = 0; p < (1<<m); p++) {
		int s = 0;
		for (int i = 0; i < m; i++) {
			if ((p>>i)&1) s += b[i];
		}
		if (s <= 1000)
			sum[s].push_back(p);
	}
	vector<vector<int>> dp(n, vector<int>(1<<m, 0));
	
	for (int mask : sum[a[0]])
		dp[0][mask] = 1;
	
	for (int i = 1; i < n; i++) {
		for (int p = 0; p < (1 << m); p++) {
			if (dp[i - 1][p] == 0) continue;
			for (int q : sum[a[i]]) {
				if (!(p & q)) {
					dp[i][p | q] = 1;
				}
			}
		}
	}
	if (count(dp[n - 1].begin(), dp[n - 1].end(), 1) == 0)
		cout << "NO\n";
	else
		cout << "YES\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...