제출 #1245142

#제출 시각아이디문제언어결과실행 시간메모리
1245142datluong_04Bank (IZhO14_bank)C++20
71 / 100
1093 ms16848 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 dp[1 << maxn] , a[maxn] , b[maxn] , cost[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 , 0 , (1 << m) - 1){ ll sum = 0; FOR(i , 0 , m - 1) if(BIT(mask , i)) sum += b[i]; cost[mask] = sum; } 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] ,1ll* (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...