Submission #1276090

#TimeUsernameProblemLanguageResultExecution timeMemory
1276090nanaseyuzukiBank (IZhO14_bank)C++20
100 / 100
168 ms23300 KiB
#include <bits/stdc++.h>
// Author: Kazuki_Will_Win_VOI_8703
#define fi first
#define se second
#define pii pair<int, int>
#define ll long long
#define all(a) a.begin(), a.end()
using namespace std;

const int mn = 1e6 + 5, bm = (1 << 20) + 1;
const int inf = 1e9;

int n, a[mn], m, b[mn], sum[mn], dp[mn], ok[mn];
vector <int> Megumi[mn];
bool flag[22][(1 << 20) + 1];

void backtrack(int i, int mask){
    if(i == n + 1){
      cout << "YES\n";
      exit(0);
    }
    if(flag[i][mask]){
		  return;
	  }
	  flag[i][mask] = true;
    for(auto sub : Megumi[a[i]]){
        if((mask & sub) == 0){
            backtrack(i + 1, mask | sub);
        }
    }
}

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 mask = 0; mask < (1 << m); mask++){
        for(int i = 0; i < m; i++){
            if(mask & (1 << i)) sum[mask] += b[i + 1];
        }
        if(sum[mask] <= 1000) Megumi[sum[mask]].push_back(mask);
    }

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

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t = 1;
    // cin >> t;
    while(t--) solve();
    return 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...