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;
#define ve vector
#define ll long long
ll mod=1e9+7ll;
ll exp(ll n,ll po){
ll ans=1;
while(po){
if(po&1ll){
ans*=n;
ans%=mod;
}
n*=n;
n%=mod;
po>>=1;
}
return ans;
}
string bin(int a,int k){
string s="";
for(int i=k-1;i>-1;i--){
if(a&(1<<i)){
s+='1';
}
else{
s+='0';
}
}
return s;
}
void yay(bool a){
if(a){
cout<<"YES";
}
else{
cout<<"NO";
}
}
int main() {
int n,m;
cin>>n>>m;
ve<int> ppl (n),money(m);
ve<int> sums(n+1,0);
for(int i=0;i<n;i++){
cin>>ppl[i];
sums[i+1]=sums[i]+ppl[i];
}
for(int i=0;i<m;i++){
cin>>money[i];
}
int tot=(1<<m);
ve<ve<bool> > can(tot,ve<bool> (n+1,0));
can[0][0]=1;
for(int msk=1;msk<tot;msk++){
can[msk][0]=1;
int sm=0;
for(int j=0;j<m;j++){
if(msk&(1<<j)){
sm+=money[j];
}
}
int l=-1;
for(int i=0;i<=n;i++){
if(sums[i]==sm){
l=i;
break;
}
}
if(l!=-1 && can[msk][l-1]){
can[msk][l]=1;
}
for(int j=0;j<m;j++){
if(msk&(1<<j)){
continue;
}
int nex=msk^(1<<j);
for(int i=1;i<=n;i++){
if(can[msk][i]){
can[nex][i]=1;
}
}
}
}
yay(can[tot-1][n]);
}
# | 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... |