Submission #1187936

#TimeUsernameProblemLanguageResultExecution timeMemory
1187936MrAndria은행 (IZhO14_bank)C++20
100 / 100
93 ms8520 KiB
#include <bits/stdc++.h>
using namespace std;
#define ss second
#define ff first

int n,m,a[25],b[25];
pair <int,int> dp[(1<<21)];
int main(){
	cin>>n>>m;

	for(int i=0;i<n;i++){
		cin>>b[i];
	}
	for(int j=0;j<m;j++){
		cin>>a[j];
	}
	b[n]=INT_MAX;
	for(int j=0;j<(1<<m);j++){
		for(int i=0;i<m;i++){
			if(j&(1<<i)){
				if(dp[j^(1<<i)].ss+a[i]==b[dp[j^(1<<i)].ff]){
					dp[j]=max(dp[j],make_pair(dp[j^(1<<i)].ff+1,0));
				}else{
					dp[j]=max(dp[j],make_pair(dp[j^(1<<i)].ff,dp[j^(1<<i)].ss+a[i]));
				}
			}
		}
	}
	for(int j=0;j<(1<<m);j++){
		if(dp[j].ff>n-1){
			cout<<"YES"<<endl;
			return 0;
		}
	}
	cout<<"NO"<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...