제출 #1164515

#제출 시각아이디문제언어결과실행 시간메모리
1164515s3yoonparkBank (IZhO14_bank)C++20
71 / 100
1097 ms143308 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]; 
vector<int> dp[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]; 
      }
    }
    if (sum <= 1000) config[sum].push_back(i); 
  }
  dp[0].push_back(0); 
  for (int i = 1; i <= n; i++) {
    int e = a[i]; 
    for (int j : dp[i - 1]) {
      for (int c : config[e]) {
        if (!(j & c)) {
          dp[i].push_back(j | c); 
        }
      }
    }
    sort(dp[i].begin(), dp[i].end()); 
    dp[i].erase(unique(dp[i].begin(), dp[i].end()), dp[i].end()); 
  }
  cout << (ssize(dp[n]) ? "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...