Submission #167009

#TimeUsernameProblemLanguageResultExecution timeMemory
167009DovranBank (IZhO14_bank)C++11
44 / 100
27 ms23928 KiB
#include <bits/stdc++.h>
#define N 1000009
#define pii pair <int, int>
#define ff first
#define ss second
#define pb push_back
#define pp pop_back
#define ll long long

using namespace std;

int n, m, v[N], c[N], b[N], mxx;
int vis[N];
vector<int>e[N];
bool asd;
vector<int>bt;
map<vector<int>, int>vss;

void pr(int x, int y);

void f(int x){
	if(x==n+1){
		cout<<"YES\n";
		asd=1;
		return;
	}
	b[0]=1;
	for(int i=1; i<=m; i++){
		if(vis[c[i]]>0){
			for(int j=v[x]; j>=0; j--){
				if(b[j]==1)
					e[j+c[i]].pb(c[i]), b[j+c[i]]=1;
			}
		}
	}
	pr(v[x], x);
	for(int i=1; i<=mxx+v[x]; i++)
		e[i].clear(), b[i]=0;
}

void pr(int x, int y){
	if(x==0){
		vector<int>asd=bt;
		sort(asd.begin(), asd.end());
		if(vss[asd]==0)
			f(y+1), vss[bt]=1;
		return;
	}
	for(auto i:e[x]){
		if(vis[i] > 0)
			vis[i]--, bt.pb(i), pr(x-i, y), bt.pp(), vis[i]++;
		if(asd==1)
			break;
	}
}

int main(){
	cin>>n>>m;
	for(int i=1; i<=n; i++)
		cin>>v[i];

	for(int i=1; i<=m; i++)
		cin>>c[i], vis[c[i]]++, mxx=max(mxx, c[i]);
	f(1);
	if(asd==0)
		cout<<"NO\n";
}
/*
1 5
8
4 2 5 1 3
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...