Submission #1368661

#TimeUsernameProblemLanguageResultExecution timeMemory
1368661po_rag526은행 (IZhO14_bank)C++20
100 / 100
157 ms24400 KiB
// ???????????????????????????????????????????????????????????
// ???????????????????????????????????????????????????????????
// ???????????????????????????????????????????????????????????
// ???????????????????????????????????????????????????????????
// ???????????????????????????????????????????????????????????
// ???????????????????????????????????????????????????????????
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define tos to_string
#define __lcm(x, y) ((x /__gcd(x, y)) * y)
// #pragma GCC optimize ("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define int long long
#define abs llabs
#define all(v) v.begin(), v.end()
const int N = 2E5 + 5, M = 1E5 + 5, LOG = 30;
const int inf = 1E18, MOD = 1E9 + 7, MOD1 = 998244353;

int n, m;
vector<int>dp[1005]{};
bool memo[21][(1 << 20) + 1]{};
int a[21]{}, b[21]{};

void dfs(int i, int mask) {

    if (i == n + 1) {
        cout << "YES\n";
        exit(0);
    }

    if (memo[i][mask] == 1) {
        return;
    }
    memo[i][mask] = 1;

    for(int j = 0; j < dp[a[i]].size(); j++){
        int x = dp[a[i]][j];
        if ((mask & x) == 0) {
            dfs(i + 1, mask + x);
        }
    }
}

void solve() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    for (int i = 1; i <= m; i++) {
        cin >> b[i];
    }

    for(int i = 0; i < (1 << m); i++){
        int cnt = 0;
        for(int j = 0; j < m; j++){
            if ((i >> j) & 1){
                cnt += b[j + 1];
            }
        }
        if(cnt>1000){
            continue;
        }
        dp[cnt].push_back(i);
    }

    dfs(1, 0);
    cout << "NO\n";
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int ttt = 1;
    // cin >> ttt;
    while(ttt--) {
        solve();
    }
}
/*
SQUARE
*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...