제출 #669100

#제출 시각아이디문제언어결과실행 시간메모리
669100amin은행 (IZhO14_bank)C++14
100 / 100
271 ms9116 KiB
#include <bits/stdc++.h>
using namespace std;


int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
long n,m;
cin>>n>>m;
map<long ,long>ma;
long a[n];
long b[m];
long ans[1<<m];
vector<long>v;
long sum=0;
for(long i=0;i<n;i++)
{
    cin>>a[i];
    sum+=a[i];
    v.push_back(sum);
}
for(long i=0;i<m;i++)
{
    cin>>b[i];
}
for(long i=0;i<(1<<m);i++)
{
    ans[i]=-1;
}
ans[0]=1;
long o=0;
long p=0;
for(long i=1;i<(1<<m);i++)
{
    o=0;
    p=0;
       for(long y=0;y<m;y++)
    {
        if(i&(1<<y))
        {
           o+=b[y];

        }
    }
 //   cout<<i<<' ';
    for(long y=0;y<m;y++)
    {
        if(i&(1<<y))
        {
            long u=i-(1<<y);
            p=o-b[y];
            if(ans[u]==-1)
            {
                continue;
            }
            if(upper_bound(v.begin(),v.end(),o)==upper_bound(v.begin(),v.end(),p))
            {
                ans[i]=1;
                break;
            }
            if(lower_bound(v.begin(),v.end(),o)!=upper_bound(v.begin(),v.end(),o)&&lower_bound(v.begin(),v.end(),o)==upper_bound(v.begin(),v.end(),p))
            {
                ans[i]=1;
                break;
            }

        }
    }
 //   cout<<o<<' '<<ans[i]<<endl;
   ma[o]=max(ma[o],ans[i]);
}
if(ma[sum]==1)
{
    cout<<"YES"<<endl;
}else
cout<<"NO"<<endl;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...