Submission #1245145

#TimeUsernameProblemLanguageResultExecution timeMemory
1245145datluong_04은행 (IZhO14_bank)C++20
0 / 100
0 ms580 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define maxn 21 #define FOR(i , a , b) for(int i = a ; i <= b; i++) #define FAST ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define BIT(mask , i) (mask >> i & 1) ll a[maxn] , b[maxn] , cost[1 << maxn]; int dp[1 << maxn]; int main(){ FAST; int n , m; cin >> n >> m; FOR(i , 0 , n - 1) cin >> a[i]; FOR(i , 0 , m - 1) cin >> b[i]; ll sumA = 0; FOR(i , 0 , n - 1) sumA += a[i]; ll sumB = 0; FOR(j , 0 , m - 1) sumB += b[j]; if(sumA > sumB){cout << "NO\n"; return 0;} FOR(mask , 1 , (1 << m) - 1){ int lsb = mask & (-mask); int j = __builtin_popcount(lsb); cost[mask] = cost[mask ^ lsb] + b[j]; } FOR(mask , 0 , (1 << m) - 1) dp[mask] = -1; dp[0] = 0; int full_mask = (1 << m) - 1; FOR(mask , 0 , (1 << m) - 1){ int k = dp[mask]; if(k < 0 || k == n) continue; int tmp = full_mask ^ mask; for(int submask = tmp ; true ; submask = (submask - 1) & tmp){ if(cost[submask] == a[k]){ int new_mask = mask | submask; dp[new_mask] = max(dp[new_mask] , k + 1); } if(submask == 0) break; } } bool ok = false; FOR(mask , 0 , (1 << m) - 1) if(dp[mask] == n){ ok = true; break; } cout << (ok ?"YES" :"NO"); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...