Submission #1321475

#TimeUsernameProblemLanguageResultExecution timeMemory
1321475zhaoxwBank (IZhO14_bank)C++20
25 / 100
12 ms10964 KiB
#include<bits/stdc++.h>
using namespace std;
int dp[1<<20][21],a[21],b[21],mp[1005],n,m,cnt = 1;
vector<int> subset[1005];
int main()
{
    cin >> n >> m;
    for(int i = 1;i <= n;i++)
    {
        cin >> a[i];
        if(!mp[a[i]]) mp[a[i]] = cnt++;
    }
    for(int i = 1;i <= m;i++)
        cin >> b[i];
    for(int mask = 0;mask < (1<<m);mask++)
    {
        int cur = 0;
        dp[mask][0] = 1;
        for(int j = 0;j < m;j++)
            if(mask&(1<<j)) cur += b[j+1];
        if(mp[cur]) subset[cur].push_back(mask);
    }
    for(int i = 1;i <= n;i++)
        for(int mask = 0;mask < (1<<m);mask++)
            for(auto x:subset[a[i]])
                if((x&mask) == x)
                    dp[mask][i] |= dp[mask^x][i-1];
    if(dp[(1<<m)-1][n]) cout << "YES\n";
    else cout << "NO\n";
    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...