Submission #1107616

#TimeUsernameProblemLanguageResultExecution timeMemory
1107616julia_08Bank (IZhO14_bank)C++17
0 / 100
1 ms336 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e3 + 10;

int a[MAXN], b[MAXN];

int dp[1 << 21], sum[MAXN];

vector<int> v[MAXN];

int main(){
    cin.tie(0)->sync_with_stdio(0);
    
    int n, m; cin >> n >> m;
    
    for(int i=0; i<n; i++){
        cin >> a[i];
    }
    
    for(int i=0; i<m; i++){
        cin >> b[i];
    }
    
    for(int s=1; s<(1 << m); s++){
        int bit = __builtin_ctz(s);
        
        sum[s] = sum[s ^ bit] + b[bit];
    }
    
    for(int i=0; i<n; i++){
        for(int s=0; s<(1 << m); s++){
            if(sum[s] == a[i]) v[i].push_back(s);
        }
    }
    
    
    for(int s=0; s<(1 << m); s++){
        
        int i = dp[s] + 1;
        
        for(auto x : v[i]){
            
            if(x & s == 0){
                dp[s ^ x] = max(dp[s ^ x], i);
            }
            
        }
        
    }
    
    cout << (dp[(1 << m) - 1] == n - 1 ? "YES" : "NO") << "\n";
    
    return 0;
}

Compilation message (stderr)

bank.cpp: In function 'int main()':
bank.cpp:44:22: warning: suggest parentheses around comparison in operand of '&' [-Wparentheses]
   44 |             if(x & s == 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...