제출 #645603

#제출 시각아이디문제언어결과실행 시간메모리
645603finn__은행 (IZhO14_bank)C++17
100 / 100
101 ms16724 KiB
#include <bits/stdc++.h>
using namespace std;

int main()
{
    size_t n, m;
    cin >> n >> m;

    vector<unsigned> sal(n), banknotes(m);
    for (unsigned &x : sal)
        cin >> x;
    for (unsigned &x : banknotes)
        cin >> x;

    vector<pair<size_t, unsigned>> dp(1 << m, {0, 0});

    for (unsigned s = 0; s < 1 << m; s++)
    {
        for (unsigned i = 0; i < m; i++)
        {
            if (s & (1 << i))
            {
                if (dp[s ^ (1 << i)].first == n)
                    dp[s] = {n, 0};
                else if (dp[s ^ (1 << i)].second + banknotes[i] == sal[dp[s ^ (1 << i)].first] &&
                         dp[s ^ (1 << i)].first + 1 > dp[s].first)
                    dp[s] = {dp[s ^ (1 << i)].first + 1, 0};
                else if (dp[s ^ (1 << i)].first >= dp[s].first)
                    dp[s] = {dp[s ^ (1 << i)].first, dp[s ^ (1 << i)].second + banknotes[i]};
            }
        }
    }

    cout << (dp[(1 << m) - 1].first == n ? "YES\n" : "NO\n");
}

컴파일 시 표준 에러 (stderr) 메시지

bank.cpp: In function 'int main()':
bank.cpp:17:28: warning: comparison of integer expressions of different signedness: 'unsigned int' and 'int' [-Wsign-compare]
   17 |     for (unsigned s = 0; s < 1 << m; s++)
      |                          ~~^~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...