제출 #1223567

#제출 시각아이디문제언어결과실행 시간메모리
1223567nt170은행 (IZhO14_bank)C++20
25 / 100
12 ms16712 KiB
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <queue>
#include <map>
#include <unordered_map>
#include <set>
#include <stack>
#include <cmath>
#include <climits>
#include <iomanip>
#include <cstdlib>
#include <numeric>
#include <unordered_set>
using namespace std;

#define faster() ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
#define pii pair<int, int>
#define ll long long


const ll mod = (ll)1e9 + 7;
const int inf = 1000000000;
const int N = 21;

int cntbit(int x) {
	int cnt = 0;
	while (x) {
		cnt += x & 1;
		x >>= 1;
	}
	return cnt;
}

int main() {
	int n, m;
	cin >> n >> m;

	bitset<21> dp[1 << N];
	memset(dp, 0, sizeof dp);

	vector<int> a(n + 1, 0);
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		a[i] += a[i - 1];
		dp[1 << i][0] = 1;
	}

	vector<int> b(m);
	for (int i = 0; i < m; i++) {
		cin >> b[i];
	}

	for (int mask = 1; mask < (1 << m); mask++) {
		int s = 0;
		for (int i = 0; i < m; i++) {
			if (1 & (mask >> i)) {
				s += b[i];
			}
		}

		int l = 0;
		for (int i = 1; i <= n; i++) {
			if (s == a[i]) {
				l = i;
				//break;
			}
		}


		if (s == a[l]  && dp[mask][l - 1]) {
			dp[mask][l] = 1;
		}

		for (int i = 0; i < m; i++) {
			if (!(1 & (mask >> i))) {
				for (int j = 0; j <= n; j++) {
					dp[mask | (1 << i)][j] = dp[mask | (1 << i)][j] | dp[mask][j];
				}
			}
		}
	}

	if (dp[(1 << m) - 1][n]) cout << "YES";
	else cout << "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...