Submission #1303908

#TimeUsernameProblemLanguageResultExecution timeMemory
1303908cavanar은행 (IZhO14_bank)C++20
71 / 100
274 ms6944 KiB
#include "bits/stdc++.h"

#define FOR(i,a,b)for(int i=(a);i<(b);i++)
#define F0R(i,a)FOR(i,0,a)
#define ROF(i,a,b)for(int i=(b)-1;i>=(a);i--)
#define R0F(i,a)ROF(i,0,a)
#define REP(a)F0R(_,a)

using namespace std;

const int mxn=20;

int a[mxn],b[mxn],p[mxn];
bool dp[mxn][1<<mxn];

int main(){
	int n,m;cin>>n>>m;
	F0R(i,n)cin>>a[i];
	F0R(i,m)cin>>b[i];
	F0R(i,n)p[i+1]=p[i]+a[i];
	F0R(i,1<<m)dp[0][i]=true;
	FOR(i,1,n+1)F0R(j,1<<m)if(dp[i-1][j]){
		int sm=0;
		F0R(k,m)if(j&(1<<k))sm+=b[k];
		if(sm==p[i-1]+a[i-1])dp[i][j]=true;
		F0R(k,m)if(j&(1<<k))dp[i][j]=dp[i][j] or dp[i][j^(1<<k)];
	}
	cout<<(dp[n][(1<<m)-1]?"YES":"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...