제출 #1140946

#제출 시각아이디문제언어결과실행 시간메모리
1140946O_Elmasry은행 (IZhO14_bank)C++20
52 / 100
1093 ms21832 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 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(int mask = 0;mask < (1ll << M);mask++){ for(auto submask : subsets[a[i]]){ if(mask & submask)continue; new_dp[mask | submask] |= dp[mask]; } } 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...