Submission #1207495

#TimeUsernameProblemLanguageResultExecution timeMemory
1207495flamingtop1Bank (IZhO14_bank)C++20
0 / 100
1 ms584 KiB
#include <bits/stdc++.h>

#define SPED                                                                                                           \
    ios_base::sync_with_stdio(false);                                                                                  \
    cin.tie(0);                                                                                                        \
    cout.tie(0);

#define endl "\n"
#define fi first
#define se second
#define lint long long

const lint INF = 1e15;

using namespace std;

int m, n;
lint a[25], b[25];
pair<int, lint> dp[(1 << 20) + 5]; // người hiện tại lớn nhất có thể tuần tự từ 0 đến m - 1 đang trả, số tiền còn lại

int main()
{
    SPED;
    cin >> m >> n;
    for (int i = 0; i < m; i++)
        cin >> a[i];
    for (int i = 0; i < n; i++)
        cin >> b[i];
    for (int mask = 1; mask < (1 << n); mask++)
    {
        lint maxi = -1, temp = -1;
        for (int i = 0; i < n; i++)
        {
            if (mask & (1 << i))
            {
                auto [paying, left] = dp[mask ^ (1 << i)];
                if (left + b[i] > a[paying])
                {
                    if (paying + 1 > maxi)
                    {
                        maxi = paying + 1;
                        temp = 0;
                    }
                }
                else
                {
                    if (paying > maxi)
                    {
                        maxi = paying;
                        temp = left + b[i];
                    }
                    else if (paying == maxi)
                        temp = max(temp, left + b[i]);
                }
            }
            dp[mask] = {maxi, temp};
        }
    }
    if (dp[(1 << n) - 1].fi == m - 1)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...