Submission #1231010

#TimeUsernameProblemLanguageResultExecution timeMemory
1231010vukhacminhBank (IZhO14_bank)C++20
100 / 100
330 ms65992 KiB
/**
*    Author :  Vu Khac Minh
**/
#include <bits/stdc++.h>
#define ll long long
#define BIT(x,i) (((x)>>(i))&(1))
#define MASK(x) ((1ll)<<(x))
using namespace std;
const int maxn = 1e5 + 5;
const int mod = 1e9+7;
int n,m,a[maxn],b[maxn],dp[21][MASK(20)],sum[maxn];
vector<int> v[maxn];
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>m;
    for(int i =1;i<=n;i++) cin>>a[i];
    for(int i = 1;i<=m;i++) cin>>b[i];

    for(int mask = 0;mask<MASK(m);mask++)
    {
        for(int i =1;i<=m;i++)
            if(BIT(mask,i-1)) sum[mask] +=b[i];
        v[sum[mask]].push_back(mask);
    }
    int all = a[1];
    for(auto  mask : v[a[1]]) dp[1][mask] = 1;
    for(int i =1;i<n;i++)
    {
        for(auto mask : v[all])
        if(dp[i][mask]!=0)
        {
            for(auto prev : v[a[i+1]])
            {
                if((mask & prev) == 0)
                    dp[i+1][prev|mask] = 1;
            }
        }
        all+=a[i+1];
    }
    for(int mask = 0;mask<MASK(m);mask++)
        if(dp[n][mask])
    {
        cout<<"YES";
        return 0;
    }
    cout<<"NO";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...