//Author RufatM
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef long long ll;
typedef vector<ll> vll;
typedef vector<vector<ll>> vvll;
typedef vector<double> vd;
typedef vector<vector<double>> vvd;
typedef vector<ld> vld;
typedef vector<vector<ld>> vvld;
typedef vector<ull> vull;
typedef vector<vector<ull>> vvull;
typedef vector<char> vc;
typedef vector<vector<char>> vvc;
typedef vector<pii> vpii;
typedef vector<vector<pii>> vvp;
typedef vector<pair<ll, ll>> vpll;
typedef vector<bool> vb;
typedef vector<vector<bool>> vvb;
typedef vector<string> vs;
typedef vector<vector<string>> vvs;
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define eb emplace_back
#define mp make_pair
#define lb lower_bound
#define ub upper_bound
#define ff first
#define ss second
#define YES cout << "YES" << endl
#define NO cout << "NO" << endl
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define pow(x, y) static_cast<int>(pow(x, y))
#define sz(x) (int)(x).sz()
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
template<typename T> inline T sqr(T x) { return x * x; }
template<typename T> inline T modinv(T a, T mod) { return 0; }
template<class T> bool isPrime(T n) { if (n <= 1)return false;if (n <= 3)return true;if (n % 2 == 0 || n % 3 == 0)return false;for (T i = 5;i * i <= n;i += 6)if (n % i == 0 || n % (i + 2) == 0)return false;return true; }
const int MOD = 1e9 + 7;
const int INF = 1e9 + 7;
const long long LINF = 1e18 + 7;
const int MAXN = 1e5 + 5;
bool backtrack(vector<int> &A, vector<int> &B, int idx) {
if(idx == (int)A.size()) return true;
if(A[idx] == 0) return backtrack(A,B,idx+1);
for(int i=0;i<(int)B.size();i++){
if(B[i] <= A[idx] && B[i]>0){
int saved = B[i];
B[i] = 0;
A[idx] -= saved;
if(backtrack(A,B,(A[idx]==0?idx+1:idx))) return true;
A[idx] += saved;
B[i] = saved;
}
}
return false;
}
signed main(){
fastio;
int t = 1;
//cin >> t;
while(t--){
int N,M;cin>>N>>M;
vector<int>A(N),B(M);
long long sumA=0,sumB=0;
for(int i=0;i<N;i++){cin>>A[i];sumA+=A[i];}
for(int j=0;j<M;j++){cin>>B[j];sumB+=B[j];}
if(sumB<sumA){cout<<"NO\n";return 0;}
sort(A.rbegin(), A.rend());
cout<<(backtrack(A,B,0)?"YES\n":"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... |