제출 #677714

#제출 시각아이디문제언어결과실행 시간메모리
677714ismayilBank (IZhO14_bank)C++17
25 / 100
4 ms3372 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;
vector<vector<int>> dp, cost;
vector<int> a, b;
int n, m;
int solve(int mask, int i){
  if(i == n) return true;
  if(dp[mask][i] != -1) return dp[mask][i];
  int flag = 0;
  for(auto s : cost[a[i]]){
    if((s & mask) == s){
      flag = (flag || solve(mask ^ s, i + 1));
    }
  }
  return dp[mask][i] = flag;
}
int main(){
  cin>>n>>m;
  a = vector<int>(n);
  b = vector<int>(m);
  dp = vector<vector<int>>((1<<m), vector<int>(n, -1));
  for(auto& i : a) cin>>i;
  for(auto& i : b) cin>>i;
  int sum = accumulate(b.begin(), b.end(), 0);
  cost.resize(sum + 1);
  for (int mask = 0; mask < (1<<m); mask++)
  {
    int total = 0;
    for (int i = 0; i < m; i++)
    {
      if(!(mask & (1<<i))) continue;
      total += b[i];
    }
    cost[total].push_back(mask);
  }
  cout<<(solve((1<<m) - 1, 0) ? "YES" : "NO");
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...