Submission #1278029

#TimeUsernameProblemLanguageResultExecution timeMemory
1278029desmond1015Bank (IZhO14_bank)C++20
100 / 100
101 ms8620 KiB
#include "bits/stdc++.h"
using namespace std;

#define ll long long

const int MOD = 1e9+7;
const int INF = 1e9;

const int N = 20;
array<int, 2> dp[1 << N]; // {no. paid people, leftover}

void solve() {
  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];
  }
  dp[0] = {0, 0};
  for (int mk = 1; mk < (1 << m); mk++) {
    dp[mk] = {0, -1};
    for (int i = 0; i < m; i++) {
      if (((mk >> i) & 1) == 0) continue;
      int prev = mk ^ (1 << i);
      if (dp[prev][1] == -1) continue;
      auto [ppl, rem] = dp[prev];
      int cur = rem + b[i];
      if (cur < a[ppl]) {
        dp[mk] = {ppl, cur};
      } else if (cur == a[ppl]) {
        dp[mk] = {ppl + 1, 0};
      }
    }
    if (dp[mk][0] == n) {
      cout << "YES\n";
      return;
    }
  }
  cout << "NO\n";
}

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);

  // freopen("input.txt", "r", stdin);
  // freopen("output.txt", "w", stdout);

  // freopen("input.in", "r", stdin);
  // freopen("output.out", "w", stdout);

  // int T = 1;
  // cin >> T;
  // while (T--) {
    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...