Submission #679287

#TimeUsernameProblemLanguageResultExecution timeMemory
679287Hacv16Bank (IZhO14_bank)C++17
0 / 100
109 ms262144 KiB
#include<bits/stdc++.h> using namespace std; #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") const int MAX = 22; const int MAXM = 50005; const int INF = 0x3f3f3f3f; int n, m, a[MAX], b[MAX]; int dp[MAX][1 << MAX]; vector<int> g[MAXM]; int solve(int i, int mask){ //current index, who I have already used if(dp[i][mask] != -1) return dp[i][mask]; if(i == n + 1) return true; int targ = a[i], resp = 0; for(auto sub : g[targ]){ if((sub & mask)) continue; resp |= solve(i + 1, mask | sub); } return dp[i][mask] = resp; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m; for(int i = 1; i <= n; i++) cin >> a[i]; for(int i = 0; i < m; i++) cin >> b[i]; for(int mask = 0; mask < (1 << m); mask++){ int cur = 0; for(int i = 0; i < m; i++) if(mask & (1 << i)) cur += b[i]; g[cur].emplace_back(mask); } memset(dp, -1, sizeof(dp)); cout << (solve(1, 0) ? "YES" : "NO") << '\n'; 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...