제출 #1362436

#제출 시각아이디문제언어결과실행 시간메모리
1362436kiengyt은행 (IZhO14_bank)C++20
100 / 100
64 ms8640 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ull = unsigned long long;
const int mod = 1e9 + 7;
const int mod2 = 1e9 + 9;
const int N = 200005;
const ll base = 311;
const int BLOCK = 330;
const ll inf = 1e18+100;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
int n,m;
int a[25], b[25];
pair <int,int> dp[1 << 20];

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

//    freopen("guard.in", "r", stdin);
//    freopen("guard.out", "w", stdout);
    cin >> n >> m;
    for(int i=0;i<n;i++) cin >> a[i];
    for(int i=0;i<m;i++) cin >> b[i];

    for(int i=0;i<(1 << m);i++) dp[i] = {-1, -1};
    dp[0] = {0,0};

    for(int mask=0;mask < (1 << m);mask++){
        if(dp[mask].first == -1) continue;
        for(int j=0;j<m;j++){
            if(!((mask >> j) & 1)){
                int nxtMask = mask | (1 << j);
                int k = dp[mask].first;
                int curVal = dp[mask].second;
                if(curVal + b[j] < a[k]){
                    dp[nxtMask] = max(dp[nxtMask], {k, b[j] + curVal});
                }
                else if(curVal + b[j] == a[k]){
                    dp[nxtMask] = max(dp[nxtMask], {k+1, 0});
                }
            }
        }
    }
    for(int mask=0;mask < (1 << m);mask++){
        if(dp[mask].first == n){
            cout << "YES";
            return 0;
        }
    }
    cout << "NO";

    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…