Submission #1279732

#TimeUsernameProblemLanguageResultExecution timeMemory
1279732haithamcoderBank (IZhO14_bank)C++20
100 / 100
100 ms16864 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<ll, ll> pll;

const ll LOG = 31;
const ll MOD = 1000000007;
const ll inf = 1e17;
const ll A = 1000;


#define db(x) cerr << #x << " = " << x << " | "
#define dbg(x) cerr << #x << " = " << x << "\n"

#define Algerian ios::sync_with_stdio(0);
#define OI cin.tie(NULL);


int main() {
    Algerian OI

    ll n, m;

    cin >> n >> m;
    vector<ll> a(n), b(m);

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

    vector<ll> dp(1 << m), left(1 << m);

    for (ll mask = 1; mask < (1 << m); mask++) {
        for (ll i = 0; i < m; i++) {
            if ((mask >> i) & 1) {
                ll new_mask = mask ^ (1 << i);
                ll val = dp[new_mask];
                
                if (dp[new_mask] < n && left[new_mask] + b[i] == a[dp[new_mask]]) {
                    val++;

                    if (val > dp[mask]) {
                        dp[mask] = val;
                        left[mask] = 0;
                    }
                } else {
                    if (dp[new_mask] >= dp[mask]) {
                        dp[mask] = dp[new_mask];
                        left[mask] = left[new_mask] + b[i];
                    }
                }
            }
        }
    }

    // dbg(left[4]);

    cout << (dp[(1 << m) - 1] == n ? "YES\n" : "NO\n");

    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...