Submission #1151149

#TimeUsernameProblemLanguageResultExecution timeMemory
1151149danglayloi1Bank (IZhO14_bank)C++20
100 / 100
595 ms105100 KiB
#include <bits/stdc++.h> #define ii pair<int, int> #define fi first #define se second #define inf 0x3f3f3f3f3f3f3f3f using namespace std; using ll = long long; const ll mod=1e9+7; const int nx=(1<<20)+5; int n, m, a[nx], b[nx], sum[nx]; bitset<nx> dp[21], cnt; vector<int> bit[nx]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>m; for(int i = 1; i <= n; i++) cin>>a[i], a[i]+=a[i-1]; for(int i = 0; i < m; i++) cin>>b[i]; for(int mask = 0; mask < (1<<m); mask++) { sum[mask]=0; for(int i = 0; i < m; i++) if(mask>>i&1) sum[mask]+=b[i], bit[mask].emplace_back(i); } for(int i = 1; i <= n; i++) { cnt.reset(); if(i==1) cnt.set(); else { for(int mask = 0; mask < (1<<m); mask++) { if(dp[i-1][mask]) { cnt[mask]=1; continue; } for(int j:bit[mask]) cnt[mask]=cnt[mask]|cnt[mask^(1<<j)]; } } for(int mask = 0; mask < (1<<m); mask++) if(sum[mask]==a[i]) dp[i][mask]=cnt[mask]; } if(dp[n].count()>0) cout<<"YES"; else cout<<"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...