#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=25,P=(1<<20);
ll n,m,a[N],b[N],v[N],p[N],dp[P];
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i];
p[0]=a[0];
for(int i=1;i<n;i++)p[i]=p[i-1]+a[i];
for(int i=0;i<m;i++)cin>>b[i];
for(int i=0;i<(1<<m);i++)for(int j=0;j<m;j++)if((i>>j)&1)v[i]+=b[j];
for(int i=1;i<P;i++)dp[i]=-1;
for(int i=0;i<(1<<m);i++)for(int j=0;j<m;j++)if((i>>j)&1){
int k=i^(1<<j);
if(dp[k]==-1)continue;
ll ost=v[k];
if(dp[k]!=0)ost-=p[dp[k]-1];
if(ost+b[j]==a[dp[k]])dp[i]=dp[k]+1;
else if(ost+b[j]<a[dp[k]])dp[i]=dp[k];
}
for(int i=0;i<P;i++)if(dp[i]==n){
cout<<"YES\n";
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... |