제출 #847766

#제출 시각아이디문제언어결과실행 시간메모리
847766vjudge1Bank (IZhO14_bank)C++17
100 / 100
147 ms8872 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 21, M = (1 << 20) + 4;
int n, m, a[N], b[N];
pair<int, int> memo[M];

pair<int, int> solve(int msk) {
    if(!msk)
        return {0, 0};
    auto &ret = memo[msk];
    if(~ret.first)
        return ret;
    ret = {0, 0};
    for(int j = 0; j < m ; ++j) {
        if((msk >> j) & 1) {
            auto cur = solve(msk - (1 << j));
            if(cur.second + b[j] == a[cur.first])
                cur.first++, cur.second = 0;
            else cur.second += b[j];
            ret = max(ret, cur);
        }
    }
    return ret;
}
int main() {
//    freopen("input.in", "r", stdin);
    cin >> n >> m;
    for(int i = 0 ; i < n ;++i)
        cin >> a[i];
    for (int i = 0; i < m; ++i)
        cin >> b[i];

    memset(memo, -1, sizeof memo);
    cout << (solve((1 << m) - 1).first >= n ? "YES" : "NO") << "\n";
    return 0;
}

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

bank.cpp: In function 'int main()':
bank.cpp:33:33: warning: 'void* memset(void*, int, size_t)' writing to an object of type 'struct std::pair<int, int>' with no trivial copy-assignment [-Wclass-memaccess]
   33 |     memset(memo, -1, sizeof memo);
      |                                 ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from bank.cpp:1:
/usr/include/c++/10/bits/stl_pair.h:211:12: note: 'struct std::pair<int, int>' declared here
  211 |     struct pair
      |            ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...