This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll // delete if causing problems
#define pb push_back
#define pf push_front
#define mp make_pair
#define fi first
#define se second
#define mod(a) (a+MOD)%MOD
#define all(a) a.begin(), a.end()
#define sz(a) (int)a.size()
const int maxn = (int)2e5+10; // change when needed!
const int MOD = (int)1e9+7; // same!
const int INF = (int)2e9;
const ll LINF = (ll)4e18;
int n, m, x, y, l, r, k, q, t;
map<int, int> M, N;
pair<int,int> dp[1<<21];
int a[21], b[21];
void solve()
{
cin >> n >> m;
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < m; i++) cin >> b[i];
dp[0] = {0,0};
for(int i = 0; i < (1<<m); i++){
for(int j = 0; j < m; j++){
if(i&(1<<j)) continue;
int n_i = i|(1<<j);
int tot = dp[i].se+b[j];
if(tot<a[dp[i].fi])
dp[n_i] = max(dp[n_i], {dp[i].fi, dp[i].se+b[j]});
else if(tot==a[dp[i].fi])
dp[n_i] = max(dp[n_i], {dp[i].fi+1, 0});
}
if(dp[i].fi==n){cout<<"YES";return;}
}
cout << "NO";
}
int32_t main()
{
ios_base::sync_with_stdio(false); cin.tie(0);
int t = 1; //cin >> t;
while(t--) solve();
}
# | 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... |