Submission #1218980

#TimeUsernameProblemLanguageResultExecution timeMemory
1218980karen671Bank (IZhO14_bank)C++20
19 / 100
1095 ms8520 KiB
#include <algorithm>
#include <iostream>
#include <random>
#include <stack>
#include <string>
#include <vector>

using namespace std;

typedef int ll;

int main() {
    size_t n, m;
    std::cin >> n >> m;

    std::vector<int> a, b;
    a.resize(n);
    b.resize(m);

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

    std::vector<std::vector<int>> dm(n, std::vector<int>(1 << m, false));
    for (size_t i = 0; i < n; ++i) {
        for (size_t mask = 0; mask < (1 << m); ++mask) {
            int sum = 0;

            if (i == 0) {
                for (size_t j = 0; j < m; ++j) {
                    if (mask & (1 << j)) {
                        sum += b[j];
                    }
                }
                if (sum == a[i]) {
                    dm[i][mask] = true;
                }
            } else [[likely]] {
                for (size_t mask2 = 0; mask2 < (1 << m); ++mask2) {
                    if (dm[i - 1][mask2] && (mask2 & (~mask)) == 0) {
                        for (size_t j = 0; j < m; ++j) {
                            if ((mask & (1 << j)) && !(mask2 & (1 << j))) {
                                sum += b[j];
                            }
                        }
                    }
                    if (sum == a[i]) {
                        dm[i][mask] = true;
                        break;
                    }
                }
            }
        }
    }

    if (std::count(dm.back().begin(), dm.back().end(), true) == 0) {
        std::cout << "NO";
    } else {
        std::cout << "YES";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...