Submission #884991

#TimeUsernameProblemLanguageResultExecution timeMemory
884991parlimoosBank (IZhO14_bank)C++17
46 / 100
49 ms39260 KiB
//Be Name KHODA
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
#define pb push_back
#define pp pop_back
#define cl clear
#define bg begin
#define lb lower_bound
#define ub upper_bound
#define arr(x) array<int , x>
#define endl '\n'

int n , m;
vector<int> a , b;
int times[(1 << 22)][2];
int dp[22][(1 << 22)];
bool oks[22][(1 << 22)];

void init(){
    for(int i = 0 ; i < n ; i++){
        for(int msk = 0 ; msk < (1 << m) ; msk++){
            int sm = 0;
            for(int j = 0 ; j < m ; j++) if((msk >> j) & 1) sm += b[j];
            if(sm == a[i]){
                oks[i][msk] = 1;
            }
        }
    }
}
void f(){
    for(int j = 0 ; j < (1 << m) ; j++){
        if(oks[0][j]){
            dp[0][j] = 1;
            // cout << 0 << " " << tour[j] << "..\n";
        }
    }
    for(int i = 1 ; i < n ; i++){
        for(int msk = 0 ; msk < (1 << m) ; msk++){
            if(dp[i - 1][msk] == 1){
                int d = ((~msk) & ((1 << m) - 1));
                dp[i][d] = 1;
            }
        }
        for(int msk = (1 << m) - 1 ; msk >= 0 ; msk--){
            for(int j = 0 ; j < m ; j++){
                if(!((msk >> j) & 1) and dp[i][msk ^ (1 << j)] == 1) dp[i][msk] = 1;
            }
        }
        for(int j = 0 ; j < (1 << m) ; j++){
            if((dp[i][j] >= 1) and oks[i][j]) dp[i][j] = 1;
            else dp[i][j] = 0;
        }
    }
    for(int msk = 0 ; msk < (1 << m) ; msk++){
        if(dp[n - 1][msk] == 1){
            cout << "YES";
            exit(0);
        }
    }
    cout << "NO";
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> m;
    for(int i = 0 ; i < n ; i++){
        int d;
        cin >> d;
        a.pb(d);
    }
    for(int i = 0 ; i < m ; i++){
        int d;
        cin >> d;
        b.pb(d);
    }
    init();
    f();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...