Submission #1162818

#TimeUsernameProblemLanguageResultExecution timeMemory
1162818paulxaxaBank (IZhO14_bank)C++17
52 / 100
1096 ms1980 KiB
#include <bits/stdc++.h>

#define NMAX 20
#define LOG 19

#define ll long long int
#define BASE 128

#define MOD 20232029


using namespace std;

ifstream fin("cod.in");
ofstream fout("cod.out");


int a[NMAX+1],b[NMAX+1];
bool dp[2][1<<NMAX];
bool can[1<<NMAX];

int n,m;

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cin >> n >> m;
    for(int i=1;i<=n;i++)
    {
        cin >> a[i];
    }
    for(int i=0;i<m;i++)
    {
        cin >> b[i];
    }

    dp[0][0]=1;
    for(int i=1;i<=n;i++)
    {
        vector<int> v;
        for(int mask=1;mask < (1<<m);mask++)
        {
            int s=0;
            for(int j=0;j<m;j++)
            {
                if(mask & (1<<j))
                {
                    s += b[j];
                }
            }
            can[mask] = (s==a[i]);
        }
        int curr = i%2;
        dp[curr][0] = 0;
        for(int mask=1;mask < (1<<m);mask++)
        {
            dp[curr][mask]=0;
            for(int submask=mask;submask!=0 && !dp[curr][mask];submask=(submask-1)&mask)
            {
                dp[curr][mask] |= dp[!curr][mask ^ submask] && can[submask];
            }
        }
    }
    bool ok=0;
   for(int mask=1;mask<(1<<m);mask++)
   {
        if(dp[n%2][mask])
        {
            ok=1;
        }
   }
   cout << (ok ? "YES" : "NO");
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...