제출 #1138374

#제출 시각아이디문제언어결과실행 시간메모리
1138374Agageldi은행 (IZhO14_bank)C++20
19 / 100
0 ms468 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define N 600005
#define pb push_back
#define ff first
#define ss second
#define all(x) x.begin(),x.end()

ll T, n, a[N], t, m, b[N], vis[N];
multiset <int> s;
void solve(int x) {
	if(x == n + 1) {
		cout << "YES\n";
		exit(0);
	}
	int pos[5000];
	for(int i = 0; i <= a[x]; i++) {
		pos[i] = 0;
	}
	pos[0] = 1;
	for(auto i : s) {
		for(int k = a[x]; k >= 0; k--) {
			if(pos[k] != 0 && pos[k + i] == 0) pos[k + i] = i;
		}
	}
	if(!pos[a[x]]) return;
	vector <int> v;
	int tt = a[x];
	while(tt > 0) {
		v.pb(pos[tt]);
		s.erase(s.find(pos[tt]));
		tt -= pos[tt];
	}
	solve(x + 1);
	for(auto i:v) {
		s.insert(i);
	}
}

int main () {
	cin >> n >> m;
	for(int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for(int i = 1; i <= m; i++) {
		int x;
		cin >> x;
		s.insert(x);
	}
	solve(1);
	cout << "NO\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...