제출 #1134427

#제출 시각아이디문제언어결과실행 시간메모리
1134427Muhammet은행 (IZhO14_bank)C++17
100 / 100
234 ms92520 KiB
#include "bits/stdc++.h"

using namespace std;

int n, m, dp[21][(1<<20)+1];

vector <int> a, b, v[1005];

bool f(int x, int mask){
	if(x == n+1) return true;
	if(~dp[x][mask]) return dp[x][mask];
	for(auto i : v[a[x]]){
		if((mask&i) != 0) continue;
		if(f(x+1,mask^i)) return dp[x][mask] = true;
	}
	return dp[x][mask] = false;
}

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

	cin >> n >> m;
	a.resize(n+1), b.resize(m+1);
	int mx = 0;
	for(int i = 1; i <= n; i++){
		cin >> a[i];
		mx = max(mx, a[i]);
	}
	for(int i = 1; i <= m; i++){
		cin >> b[i];
	}
	memset(dp, -1, sizeof dp);
	for(int i = 0; i < (1<<m); i++){
		int x = 0;
		for(int j = 0; j < m; j++){
			if((i>>j) & 1) x += b[j+1];
		}
		if(x > mx) continue;
		v[x].push_back(i);
	}
	cout << (!f(1,0) ? "NO\n" : "YES\n");
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...