제출 #1282547

#제출 시각아이디문제언어결과실행 시간메모리
1282547kreukpgBank (IZhO14_bank)C++20
100 / 100
793 ms16864 KiB
// code by phongln #include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second #define fo(i, a, b, k) for(ll i=a; i<=b; i+=k) #define fod(i, a, b, k) for(ll i=a; i>=b; i-=k) #define lop(x, s) for(auto x : s) #define sz(s) s.size() #define all(s) s.begin(), s.end() #define pll pair<ll, ll> #define vll vector<ll> #define pb push_back #define mp make_pair #define sq(a) (a)*(a) #define cb(a) (a)*(a)*(a) #define NAME "TEST" const ll inf=1e18; const ll mod=1e9+7; const ll maxn=1e6+5; int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1}; void init(){ } void solve(){ ll n, m; cin >> n >> m; vll a(n), b(m); fo(i, 0, n-1, 1) cin >> a[i]; fo(i, 0, m-1, 1) cin >> b[i]; sort(all(a)); ll num_masks = 1 << m; vll sum(num_masks, 0); fo(i, 0, m-1, 1) sum[1 << i] = b[i]; fo(mask, 1, num_masks-1, 1){ ll lsb = mask & (-mask); if(mask != lsb) sum[mask] = sum[mask ^ lsb] + sum[lsb]; } vector<ll> dp(num_masks, -1); dp[0] = 0; bool ok = 0; fo(mask, 0, num_masks-1, 1){ if(dp[mask] == -1) continue; ll k = dp[mask]; if(k == n){ ok = 1; break; } ll need = a[k]; ll cmask = (num_masks - 1) ^ mask; for(ll s = cmask; s > 0; s = (s - 1) & cmask){ if(sum[s] == need){ ll newmask = mask | s; dp[newmask] = max(dp[newmask], k + 1); } } } if(!ok){ fo(mask, 0, num_masks-1, 1){ if(dp[mask] == n){ ok = 1; break; } } } cout << (ok ? "YES" : "NO"); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); // freopen(NAME".INP", "r", stdin); // freopen(NAME".OUT", "w", stdout); init(); ll t = 1; while(t--){ solve(); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...