제출 #1140953

#제출 시각아이디문제언어결과실행 시간메모리
1140953O_Elmasry은행 (IZhO14_bank)C++20
52 / 100
1094 ms13052 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; 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 submask : subsets[a[i]]){ int bits = __builtin_popcountll(submask); int x = M - bits; for(int submask2 = 0;submask2 < (1ll << x);submask2++){ int mask = 0, idx = 0; for(int i = 0;i < M;i++){ if((submask >> i) & 1)mask |= (1ll << i); else{ int b = (submask2 >> idx) & 1; mask |= (b * (1ll << i)); idx++; } } dbg(i, mask, submask, dp[mask ^ submask]); new_dp[mask] |= dp[mask ^ submask]; } } 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...