제출 #1241900

#제출 시각아이디문제언어결과실행 시간메모리
1241900wedonttalkanymore은행 (IZhO14_bank)C++20
71 / 100
1092 ms86724 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

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

const ll N = 21, inf = 1e18, mod = 1e9 + 7, block = 320, lim = 1 << 20;

int n, m;
int a[N], b[N];
vector <int> adj[N];
int f[N][lim + 1];

void preprocess() {
	for (int x = 0; x < n; x++) {
		for (int mask = 0; mask < (1 << m); mask++) {
			int sum = 0;
			for (int j = 0; j < m; j++) {
				if ((1 << j) & mask) sum += b[j];
			}
			if (sum == a[x]) adj[x].push_back(mask);
		}
	}
}

int dp(int i, int mask) {
	if (i >= n) return 1;
	if (f[i][mask] != -1) return f[i][mask];
	int ans = 0;
	for (auto v : adj[i]) {
		if (!(mask & v)) {
			ans = max(ans, dp(i + 1, mask | v));
		}
	}
	return f[i][mask] = ans;
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < m; i++) cin >> b[i];
    preprocess();
    memset(f, -1, sizeof(f));
    cout << (dp(0, 0) == 1 ? "YES" : "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...