Submission #943267

#TimeUsernameProblemLanguageResultExecution timeMemory
943267mannshah1211은행 (IZhO14_bank)C++14
71 / 100
1008 ms9556 KiB
/**
 *   author: hashman
 *   created: 
**/
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 42
#endif

int32_t main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n, m;
	cin >> n >> m;
	vector<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>> masks(1001);
	for (int i = 0; i < (1 << m); i++) {
		int sum = 0;
		for (int j = 0; j < m; j++) {
			if (i & (1 << j)) sum += b[j];
		}
		if (sum <= 1000) masks[sum].push_back(i);
	}
	vector<bitset<1048576>> dp(21, bitset<1048576>());
	for (int i = 0; i < (1 << m); i++) {
		dp[0][i] = true;
	}
	for (int i = 1; i <= n; i++) {
		for (int mask : masks[a[i - 1]]) {
			for (int j = mask; j < (1 << m); j = (j + 1) | mask) {
				dp[i][j] = dp[i][j] || dp[i - 1][j ^ mask];
			}
		}
	}
	if (dp[n][(1 << m) - 1]) 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...