Submission #636005

#TimeUsernameProblemLanguageResultExecution timeMemory
636005TUNGDUONGWILLWINVOI2023Bank (IZhO14_bank)C++14
100 / 100
628 ms10192 KiB
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <vector>
using namespace std;
int n, m, a[22], b[22];
vector<int> f[20005];
bool dp[1 << 20], ndp[1 << 20];
int main() {
  // Coding
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
  }
  for (int i = 0; i < m; ++i) {
    scanf("%d", &b[i]);
  }
  for (int mask = 0; mask < (1 << m); ++mask) {
    int sum = 0;
    for (int i = 0; i < m; ++i) {
      if (mask >> i & 1) {
        sum += b[i];
      }
    }
    f[sum].push_back(mask);
  }
  dp[0] = true;
  int tot = 0;
  for (int i = 0; i < n; ++i) {
    tot += a[i];
    memset(ndp, false, sizeof(ndp));
    for (int mask : f[tot - a[i]]) {
      ndp[mask] = dp[mask];
    }
    memset(dp, false, sizeof(dp));
    for (int mask = 0; mask < (1 << m); ++mask) {
      if (ndp[mask]) {
        for (int j = 0; j < m; ++j) {
          if (mask >> j & 1) {
            continue;
          }
          ndp[mask ^ (1 << j)] = (ndp[mask] ? true : ndp[mask ^ (1 << j)]);
        }
      }
    }
    for (int mask : f[tot]) {
      dp[mask] = (ndp[mask] ? true : dp[mask]);
    }
  }
  for (int mask : f[tot]) {
    if (dp[mask]) {
      puts("YES");
      return 0;
    }
  }
  puts("NO");
  return 0;
}

Compilation message (stderr)

bank.cpp: In function 'int main()':
bank.cpp:23:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |   scanf("%d%d", &n, &m);
      |   ~~~~~^~~~~~~~~~~~~~~~
bank.cpp:25:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |     scanf("%d", &a[i]);
      |     ~~~~~^~~~~~~~~~~~~
bank.cpp:28:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |     scanf("%d", &b[i]);
      |     ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...