Submission #1162813

#TimeUsernameProblemLanguageResultExecution timeMemory
1162813paulxaxaBank (IZhO14_bank)C++17
52 / 100
1093 ms1352 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];


int n,m;

int main()
{
    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];
                }
            }
            if(s==a[i])
            {
                v.push_back(mask);
            }
        }
        int curr = i%2;
        dp[curr][0] = 0;
        for(int mask=1;mask < (1<<m);mask++)
        {
            dp[curr][mask]=0;
            for(int mask1 : v)
            {
                if((mask & mask1) == mask1)
                {
                    dp[curr][mask] |= dp[!curr][mask ^ mask1];
                    if(dp[curr][mask])
                    {
                        break;
                    }
                }
            }
        }
    }
    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...