Submission #1140978

#TimeUsernameProblemLanguageResultExecution timeMemory
1140978O_ElmasryBank (IZhO14_bank)C++20
100 / 100
781 ms28228 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 int_fast16_t const long long mod = 1000000007, MaxN = 200005, INF = 1e18; void solve(){ int N, M, 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; for(int i = 0;i < N;i++){ vector<int>new_dp(1ll << M); for(auto sub : subsets[a[i]]){ int full = ((1ll << M) - 1) & ~sub; dbg(i, sub, full); for(int s = full;;s = (s - 1) & full){ dbg(s); int mask = s | sub; new_dp[mask] |= dp[s]; if(s == 0)break; } } dp = new_dp; } 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...