Submission #1286309

#TimeUsernameProblemLanguageResultExecution timeMemory
1286309alizhanBank (IZhO14_bank)C++20
100 / 100
369 ms103112 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int mod =  1e9 + 7;
const int N = (int)2e5 + 7;
#define skip continue
#define uno first
#define duo second
#define GO while(tt--)
#define ins insert
#define pb push_back
#define all(x) x.begin(), x.end()
#define Kaldun ios::sync_with_stdio(false); cin.tie(nullptr)
#define int long long

int bp(int a, int n) {
    if(n == 0) return 1;
    if(n % 2 == 1) return (bp(a, n-1) * a) % mod;
    long long b = bp(a, n/2);
    return (b * b) % mod;
}
int dp[22][(1<<20) + 2];
int lcm(int a,int b){ return (a * b) / __gcd(a,b);}
void solve(){
    int n,m;
    cin>>n>>m;
    int a[n+1],b[m+1];
    int cnt[1005]{};
    int mx = 0;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        cnt[a[i]] = 1;
        mx=max(mx,a[i]);
    }
    for(int i=0;i<m;i++){
        cin>>b[i];
    }
    vector<int> g[1005];
    for (int mask=0;mask < (1<<m); mask++) {
        int t = 0;
        for (int i = 0; i < m; i++) {
            if (mask & (1 << i)) {
                t += b[i];
            }
        }
        if (t <= mx && cnt[t]) {
            g[t].push_back(mask);
        }
    }
    dp[0][0] = 1;
    for (int i = 0; i < n; i++) {
        int ok = 0;
        for (int mask = 0; mask < (1 << m); mask++) {
            if (!dp[i][mask]) continue;
            for (int sb : g[a[i + 1]]) {
                if ((sb & mask) == 0) {
                    dp[i + 1][mask | sb] = 1;
                    ok = 1;
                }
            }
        }
        if (ok == 0) {
            cout << "NO" <<endl;;
            return;
        }
    }
    cout<<"YES"<<endl;
}
signed main() {
    Kaldun;
    cout.precision(0);
    int tt=1;
    //cin>>tt;
    while(tt--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...