#include <bits/stdc++.h>
using namespace std;
const int N = (1<<20);
int n, m;
int keep[21], bank[21];
pair<int,int> dp[N];
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
for( int i=0;i<n;i++ ) cin >> keep[i];
for( int i=0;i<m;i++ ) cin >> bank[i];
for( int i=0;i<N;i++ ) dp[i] = {-1, -1};
dp[0] = {0, 0};
for( int mask=0;mask<(1<<m);mask++ )
{
for( int i=0;i<m;i++ )
{
if( !( mask & (1<<i) ) ) continue;
int prev = (mask ^ (1<<i));
auto [peo, left] = dp[prev];
if( peo == -1 ) continue;
if( left+bank[i] < keep[peo] )
{
dp[mask] = { peo, left+bank[i] };
}
else if( left+bank[i] == keep[peo] )
{
dp[mask] = { peo+1, 0 };
}
}
if( dp[mask].first == n )
{
cout << "YES";
return 0;
}
}
cout << "NO";
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... |