Submission #1140958

#TimeUsernameProblemLanguageResultExecution timeMemory
1140958O_Elmasry은행 (IZhO14_bank)C++20
52 / 100
1095 ms13720 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3,unroll-loops") #ifdef LOCAL #include "debug.h" #else #define dbg(...) #endif #define endl '\n' // #define int int64_t #define int short int const long long mod = 1000000007, MaxN = 200005, INF = 1e18; int cur, N, M; void rec(int idx, vector<int> &ret, int rest){ if(idx == M){ ret.push_back(cur); return; } rec(idx + 1, ret, rest); if(!((rest >> idx) & 1)){ cur |= (1ll << idx); rec(idx + 1, ret, rest); cur ^= (1ll << idx); } } vector<int>generate(int submask){ cur = 0; vector<int>ret; rec(0, ret, submask); return ret; } void solve(){ int Max = 0; cin >> N >> M; vector<int>a(N), b(M); for(int i = 0;i < N;i++){ cin >> a[i]; Max = max(Max, a[i]); } for(int i = 0;i < M;i++)cin >> b[i]; vector<vector<int>>subsets(Max + 1); for(int mask = 1;mask < (1ll << M);mask++){ int sum = 0; for(int i = 0;i < M;i++){ if((mask >> i) & 1)sum += b[i]; } if(sum <= Max)subsets[sum].push_back(mask); } vector<int>dp(1ll << M); dp[0] = 1; vector<int>new_dp(1ll << M); for(int i = 0;i < N;i++){ for(auto submask : subsets[a[i]]){ int bits = __builtin_popcountll(submask); auto ok = generate(submask); for(auto submask2 : ok){ int mask = submask | submask2; new_dp[mask] |= dp[submask2]; } } new_dp.swap(dp); fill(new_dp.begin(), new_dp.end(), 0); } int res = 0; for(auto x : dp)res |= x; cout << (res ? "YES" : "NO") << endl; } signed main() { #ifdef LOCAL FileRedirect("test"); #endif ios::sync_with_stdio(0); cin.tie(nullptr); cout.tie(nullptr); // freopen("pails.in","r",stdin); // freopen("pails.out","w",stdout); int Tc = 1; // cin >> Tc; for(int T = 1;T <= Tc;T++)solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...