제출 #794983

#제출 시각아이디문제언어결과실행 시간메모리
794983nguyennehehe은행 (IZhO14_bank)C++14
71 / 100
1055 ms16720 KiB
#include<bits/stdc++.h>
using namespace std;

const int N = 20;

int n, m, a[N], b[N];

void sub1() {
  bool ok = false;
  for (int s = 1; s < (1 << m); ++s) {
    int sum = 0;
    for (int i = 0; i < m; ++i) {
      if (s >> i & 1) sum += b[i];
    }

    ok |= sum == a[0];
  }

  cout << (ok ? "YES" : "NO");
}

void sub2() {
  bool good = false;
  sort(b, b + m);
  do {
    bool ok = true;
    for (int i = 0, j = 0; i < n; ++i) {
      int sum = 0;
      while (j < m && sum < a[i]) {
        sum += b[j];
        j += 1;
      }
      ok &= sum == a[i];
    }
    good |= ok;

    if (good) break;
  } while (next_permutation(b, b + m));
  cout << (good ? "YES": "NO");
}

void maximize(int &x, int y) {
  if (x < y) x = y;
}

void sub3() {
  vector<int> sum(1 << m);
  for (int s = 1; s < (1 << m); ++s) {
    int cur = 0;
    for (int i = 0; i < m; ++i) {
      if (s >> i & 1) cur += b[i];
    }
    sum[s] = cur;
  }
  vector<vector<int>> dp(n, vector<int>(1 << m));
  for (int s = 0; s < (1 << m); ++s) {
    if (sum[s] == a[0]) dp[0][s] = 1;
  }
  for (int i = 1; i < n; ++i) {
    dp[i] = dp[i - 1];

    for (int s = 0; s < (1 << m); ++s) {
      int msk = ((1 << m) - 1) ^ s;
      for (int x = msk; ; x = (x - 1) & msk) {
        if (sum[x] == a[i]) {
          maximize(dp[i][s | x], dp[i - 1][s] + 1);
        }
        if (x == 0) break;
      }
    }
  }

  bool good = false;
  for (int s = 0; s < (1 << m); ++s) {
    if (dp[n - 1][s] == n) good = true;
  }
  cout << (good ? "YES": "NO");
}

signed main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  cin >> n >> m;
  for (int i = 0; i < n; ++i) cin >> a[i];
  for (int i = 0; i < m; ++i) cin >> b[i];
  sub3();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...