#include "bits/stdc++.h"
#define FOR(i,a,b)for(int i=(a);i<(b);i++)
#define F0R(i,a)FOR(i,0,a)
#define ROF(i,a,b)for(int i=(b)-1;i>=(a);i--)
#define R0F(i,a)ROF(i,0,a)
#define REP(a)F0R(_,a)
using namespace std;
const int mxn=20;
int a[mxn],b[mxn],p[mxn+1];
bool dp[mxn+1][1<<mxn];
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
int n,m;cin>>n>>m;
F0R(i,n)cin>>a[i];
F0R(i,m)cin>>b[i];
F0R(i,n)p[i+1]=p[i]+a[i];
F0R(i,1<<m)dp[0][i]=true;
FOR(i,1,n+1)F0R(j,1<<m)if(dp[i-1][j]){
int sm=0;
F0R(k,m)if(j&(1<<k))sm+=b[k];
if(sm==p[i-1]+a[i-1])dp[i][j]=true;
F0R(k,m)if(j&(1<<k))dp[i][j]=dp[i][j] or dp[i][j^(1<<k)];
}
cout<<(dp[n][(1<<m)-1]?"YES":"NO")<<endl;
}
| # | 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... |