제출 #1271232

#제출 시각아이디문제언어결과실행 시간메모리
1271232krzyska은행 (IZhO14_bank)C++20
100 / 100
76 ms9544 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, m;
    cin >> n >> m;
    int konta[n], bank[m], calosci[(1 << m)], reszty[(1 << m)];

    for(int i = 0; i < n; i++){
        cin >> konta[i];
    }
    for(int i = 0; i < m; i++){
        cin >> bank[i];
    }

    bool policzone[(1 << m)];

    for(int i = 0; i < (1 << m); i++){
        calosci[i] = 0;
        reszty[i] = 0;
        policzone[i] = 0;
    }

    policzone[0] = 1;

    for(int i = 0; i < (1 << m); i++){
        if(!policzone[i]){continue;}
        for(int j = 0; j < m; j++){
            if(((1 << j)&i) == 0){
                if(reszty[i] + bank[j] == konta[calosci[i]]){
                    calosci[i^(1 << j)] = calosci[i] + 1;
                    reszty[i^(1 << j)] = 0;
                    policzone[i^(1 << j)] = 1;
                }
                if(reszty[i] + bank[j] < konta[calosci[i]]){
                    calosci[i^(1 << j)] = calosci[i];
                    reszty[i^(1 << j)] = reszty[i] + bank[j];
                    policzone[i^(1 << j)] = 1;
                }

                if(calosci[i^(1 << j)] == n){
                    cout << "YES";
                    return 0;
                }
            }
        }
    }

    cout << "NO";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...