제출 #166923

#제출 시각아이디문제언어결과실행 시간메모리
166923Dovran은행 (IZhO14_bank)C++11
0 / 100
1068 ms21476 KiB
#include <bits/stdc++.h>
#define N 100009
#define pii pair <int, int>
#define ff first
#define ss second
#define pb push_back
#define ll long long

using namespace std;

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

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);
}

void pr(int x, int y){
//	cout<<x<<' '<<y<<endl;
	if(x==0){
		f(y+1);
		return;
	}
	for(auto i:e[x]){
		if(vis[i] > 0)
			vis[i]--, pr(x-i, y), 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]]++;
	
	f(1);
}
/*
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...