#include <bits/stdc++.h>
#include <cstdlib>
using namespace std;
using ll = long long;
using str = string;
using pii = pair<int, int>;
using pil = pair<int, ll>;
using pll = pair<ll, ll>;
#define FOR(i, l, r) for (int i=l; i<=r; i++)
#define FOR2(i, l, r) for (int i=l; i>=r; i--)
#define ALL(v) v.begin(), v.end()
#define fi first
#define se second
#define ce cout << endl
#define pb push_back
#define eb emplace_back
const ll MOD = 998244353;
const int INF = 1e9;
const int LOG = 60;
const int MAX = 26;
void solve() {
int n, m; cin >> n >> m;
vector<int> a(n), b(m);
FOR(i, 0, n-1) cin >> a[i];
FOR(i, 0, m-1) cin >> b[i];
vector<pii> dp((1 << m), {0, 0});
// person, state
FOR(mask, 0, (1 << m)-1) {
if (dp[mask].fi == n) {
cout << "YES"; return;
}
FOR(i, 0, m-1) {
if (mask & (1 << i)) continue;
pii cur = dp[mask];
if (cur.se + b[i] == a[cur.fi]) cur = {cur.fi + 1, 0};
else cur = {cur.fi, cur.se + b[i]};
dp[mask | (1 << i)] = max(dp[mask | (1 << i)], cur);
}
}
cout << "NO";
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
// freopen("movie.in", "r", stdin);
// freopen("movie.out", "w", stdout);
int t = 1;
// cin >> t;
while (t--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |