Submission #1138556

#TimeUsernameProblemLanguageResultExecution timeMemory
1138556AgageldiBank (IZhO14_bank)C++20
100 / 100
160 ms225632 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define N 600005 #define pb push_back #define ff first #define ss second #define all(x) x.begin(),x.end() ll n, a[N], t, m, b[N], c[N], dp[25][(1<<20) + 1]; vector <int> v[N]; void find(int x) { if(x == m+1) { ll sum = 0, mask = 0; for(int i = 1; i <= m; i++) { if(c[i]) { mask += (1<<(i - 1)); sum += b[i]; } } if(sum <= a[n]) { v[sum].pb(mask); } return; } for(int i = 0; i <= 1; i++) { c[x] = i; find(x+1); } } bool solve(int x,int mk) { if(x == n + 1) return 1; if(~dp[x][mk]) return dp[x][mk]; for(auto i:v[a[x]]) { if((i&mk) != 0) continue; if(solve(x+1,(mk^i))) return dp[x][mk] = 1; } return dp[x][mk] = 0; } int main () { ios::sync_with_stdio(0);cin.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) { cin >> a[i]; } for(int i = 1; i <= m; i++) { cin >> b[i]; } memset(dp,-1,sizeof dp); sort(a+1,a+n+1); find(1); cout << (solve(1,0) ? "YES\n" : "NO\n"); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...