제출 #1282547

#제출 시각아이디문제언어결과실행 시간메모리
1282547kreukpg은행 (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...