Submission #1306778

#TimeUsernameProblemLanguageResultExecution timeMemory
1306778aloszaBank (IZhO14_bank)C++20
100 / 100
95 ms8640 KiB
#include <bits/stdc++.h>

using namespace std;

#define FOR(i, l, r) for(int i = (l); i < (r); i++)

int arr1[20], arr2[20];
pair<int, int> dp[1 << 20];

int main()
{
    cin.tie(0)->sync_with_stdio(0);
    int n, m;
    cin >> n >> m;    
    FOR(i, 0, n) cin >> arr1[i];
    FOR(i, 0, m) cin >> arr2[i];

    fill(dp, dp + (1 << m), make_pair(-1, -1));

    dp[0] = {0, 0};
    FOR(i, 0, 1 << m)
    {
        if(dp[i].first == -1) continue;

        if(dp[i].first == n) return cout << "YES\n", 0;
        FOR(j, 0, m)
        {
            if(i & (1 << j)) continue;

            int k = dp[i].second + arr2[j];
            if(k == arr1[dp[i].first]) dp[i | (1 << j)] = {dp[i].first + 1, 0};
            else if(k < arr1[dp[i].first]) dp[i | (1 << j)] = {dp[i].first, k};
        }
    }

    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...