제출 #1164510

#제출 시각아이디문제언어결과실행 시간메모리
1164510s3yoonparkBank (IZhO14_bank)C++20
100 / 100
319 ms20592 KiB
#include <bits/stdc++.h> 
#define ssize(x) (int)x.size() 
using namespace std; 
const int N = 21; 
int n, m; 
int a[N], b[N]; 
bool dp[N][1 << N]; 
vector<int> config[1001]; 
void solve() {
  cin >> n >> m; 
  for (int i = 1; i <= n; i++) cin >> a[i]; 
  for (int i = 1; i <= m; i++) cin >> b[i]; 
  for (int i = 0; i < (1 << m); i++) {
    int sum = 0; 
    for (int j = 0; j < m; j++) {
      if ((1 << j) & i) {
        sum += b[j + 1]; 
      }
    }
    config[sum].push_back(i); 
  }
  dp[0][0] = true; 
  for (int i = 1; i <= n; i++) {
    int e = a[i]; 
    for (int j = 0; j < (1 << m); j++) {
      if (!dp[i - 1][j]) continue; 
      for (int c : config[e]) {
        if (!(j & c)) {
          dp[i][j | c] = dp[i - 1][j]; 
        }
      }
    }
  }
  int ans = 0; 
  for (int i = 0; i < (1 << m); i++) {
    ans |= dp[n][i]; 
  }
  cout << (ans ? "YES\n" : "NO\n"); 
}
int main() {
  // freopen("bank.in", "r", stdin); 
  // freopen("bank.out", "w", stdout); 
  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...