Submission #1301995

#TimeUsernameProblemLanguageResultExecution timeMemory
1301995metaliusBank (IZhO14_bank)C++20
100 / 100
441 ms24600 KiB
#include <bits/stdc++.h>


using namespace std;


using ll = long long;


int a[21];
int notes[21];
bool dp[21][1<<20];

int sum[1<<20];

vector<int> sumst[20003];

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	int n,m; cin >> n >> m;
	for(int i = 1; i <= n;i++) {
		cin >> a[i];
	}
	for(int i = 0; i < m; i++) {
		cin >> notes[i];
	}
	
	sum[0] = 0;
	for(int i = 1; i < (1 << m); i++) {
		for(int j = 0; j < m; j++) {
			if((i >> j) & 1) {
				sum[i] += notes[j];
			}
		}
		sumst[sum[i]].push_back(i);
	}
	/*
for(auto &vc : sumst) {
		if(!vc.empty()) {
			cout << sum[vc[0]] << " ";
			for(auto el : vc) {
				cout << el << " ";
			}
			cout << "\n";
		}
	}
	*/
	dp[0][0] = true;
	int cursum = 0;
	for(int i = 1; i <= n; i++) {
		cursum += a[i];
		for(int s = 1; s < (1 << m); s++) {
			if(sum[s] != cursum) continue;
			for(auto el : sumst[a[i]]) {
				if((el & s) == el) {
					dp[i][s] = dp[i][s] || dp[i-1][s - el];
				}
			}
		}
	}
	bool ans = false;
	for(auto el : sumst[cursum]) {
		ans = ans ||  dp[n][el];
	}
	cout << (ans ? "YES":"NO");
	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...