#include <bits/stdc++.h>
using namespace std;
#define MAXN 20
#define MAXM 20
#define MAXMSK (1<<MAXM)
int a[MAXN];
int b[MAXM];
int sum[MAXM+5];
int dp[MAXMSK];
int main() {
int n, m;
cin >> n >> m;
for(int i=0;i<n;i++) cin >> a[i];
for(int i=0;i<m;i++) cin >> b[i];
memset(sum, 0, sizeof(sum));
memset(dp, 0, sizeof(dp));
for(int i=0;i<n;i++) sum[i+1]=sum[i]+a[i];
dp[0]=0;
int mxmsk=1<<m;
for(int i=1;i<mxmsk;i++) {
int bst=0;
int s=0;
for(int j=0;j<m;j++) {
if(i&(1<<j)) {
bst=max(bst, dp[i^(1<<j)]);
s+=b[j];
}
}
dp[i]=bst;
if(s==sum[bst+1]) dp[i]=bst+1;
}
cout << (dp[mxmsk-1]==n?"YES":"NO") << endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |