#include<bits/stdc++.h>
using namespace std;
int dp[1<<20],a[21],b[21],p[21],mp[1005*20],n,m,ok,cnt = 1;
vector<int> subset[1005];
int main()
{
cin >> n >> m;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
if(!mp[a[i]]) mp[a[i]] = cnt++;
p[i] = p[i-1]+a[i];
}
for(int i = 1;i <= m;i++)
cin >> b[i];
for(int mask = 0;mask < (1<<m);mask++)
{
int cur = 0;
for(int j = 0;j < m;j++)
if(mask&(1<<j)) cur += b[j+1];
if(mp[cur]) subset[cur].push_back(mask);
}
for(int mask = 0;mask < (1<<m);mask++)
{
int cur = 0,sum = 0;
for(int j = 0;j < m;j++)
if(mask&(1<<j))
{
cur = max(cur,dp[mask^(1<<j)]);
sum += b[j+1];
}
if(sum == p[cur+1]) cur++;
dp[mask] = cur;
}
for(int mask = 0;mask < (1<<m);mask++)
if(dp[mask] == n) ok = 1;
if(ok) cout << "YES\n";
else cout << "NO\n";
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... |