#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
#define fi first
#define se second
#define pb push_back
const int MOD = 1e9 + 7;
const int MAX = (1ll << 20) + 5;
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, m; cin >> n >> m;
int a[n + 1];
int b[m];
for(int i = 1 ; i <= n ; i++)cin >> a[i];
for(int i = 0 ; i < m ; i++)cin >> b[i];
ll dp[(1ll << m) + 5][2];memset(dp, -1, sizeof(dp));
// 0 is the fulfilled, 1 is the remaining from the last one
dp[0][0] = 1;
dp[0][1] = 0;
bool ans = 0;
for(int i = 0 ; i <= (1ll << m) - 1 ; i++){
for(int j = 0 ; j < m ; j++){
if((i & (1ll << j)) == 0)continue;
ll prev = (i^ (1ll <<j));
if(dp[prev][0] == -1)continue;
ll cur = dp[prev][1] + b[j];
ll needed = a[dp[prev][0]];
if(cur < needed){
dp[i][0] = dp[prev][0];
dp[i][1] = cur;
}
else if(cur == needed){
dp[i][0] = dp[prev][0] + 1;
dp[i][1] = 0;
}
}
if(dp[i][0] == n + 1){
ans = 1;
break;
}
}
cout << (ans ? "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... |