Submission #340558

#TimeUsernameProblemLanguageResultExecution timeMemory
340558SprdaloBank (IZhO14_bank)C++17
52 / 100
1094 ms384 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<double> vd;
typedef vector<bool> vb;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<pi> vp;
typedef vector<pl> vpl;

vi a(21), b(21);
int n, m;

void ye(){
    cout << "YES\n";
    exit(0);
}

void solve(int x, int suma, int mask, int j){
    if (x>n) ye();

    if (!suma){
        solve(x+1,a[x+1], mask,0);
        return;
    }

    int cnt = __builtin_popcount(mask);
    if (m-cnt-1 < x-n) return;
    for (int i = j; i < m; ++i){
        if (m-cnt-1 < x-n) break;
        if (mask&(1 << i) || b[i] > suma) continue;
        solve(x, suma-b[i], mask^(1<<i),j+1); 
    }
}

signed main()
{
    ios_base::sync_with_stdio(false); 
    cin.tie(nullptr); 
    cout.tie(nullptr); 
    cerr.tie(nullptr);    

    cin >> n >> m;

    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    for (int i = 0; i < m; ++i)
        cin >> b[i];

    solve(1, a[1], 0, 0);

    cout << "NO\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...