#include <bits/stdc++.h>
using namespace std;
const int maxm=20;
const int inf=1e9+7;
int dp[(1<<maxm)], sobra[(1<<maxm)], v[maxm+1], notas[maxm];
int main()
{
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
memset(dp,-1,sizeof(dp)); memset(sobra,-1,sizeof(sobra));
int n, m; cin >> n >> m;
v[n]=inf;
for(int i=0;i<n;i++) cin >> v[i];
for(int i=0;i<m;i++) cin >> notas[i];
dp[0]=0; sobra[0]=0;
for(int mask=1;mask<(1<<m);mask++){
for(int k=0;k<m;k++){
if((mask&(1<<k))==0) continue;
int ant=mask^(1<<k);
if(dp[ant]==-1) continue;
int at=sobra[ant]+notas[k];
if(at<v[dp[ant]]){
dp[mask]=dp[ant];
sobra[mask]=at;
}else if(at==v[dp[ant]]){
dp[mask]=dp[ant]+1;
sobra[mask]=0;
}
}
}
if(dp[(1<<m)-1]==n) cout << "YES" << endl;
else cout << "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... |