Compy's Blog
347 words
2 minutes
[BOJ] 발전소
2025-10-04

발전소

TimeLimitMemoryLimitConditionTAG
2s128MB(1 ≤ N ≤ 16, 0 ≤ P ≤ N, 0 ≤ cost ≤ 36)Dynamic Programming

그냥 간단한 bit masking dp였네용. 이제는 범위가 작기만하면 bit masking 생각나서 금방 접근하는거 같아요. 재밌었습니다.

정답 코드
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <sstream>
#include <iomanip>
#include <string>
#include <numeric>
#include <unordered_set>
#include <unordered_map>
#include <climits>
using namespace std;
using ll = unsigned long long;
//ll MOD = 1'000'000'007;
ll MOD = 1.8446744074E19;

int N;


int power_stations[20][20];


int dp[1 << 16];
// 이것도 뭐 bit masking 때리면 되는 놈인데? 그러고 dp[i]는 그냥 코스트로 해보지 뭐

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> N;
    
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N; j++)
            cin >> power_stations[i][j];
    }
    
    int state = 0;
    
    for(int i = 0; i < N; i++){
        char current;
        cin >> current;
        
        if(current == 'Y') state |= 1 << i;
    }
    
    int p;
    cin >> p;
    
    for(int i = 0; i < 1 << N; i++){
        dp[i] = 1000000000;
    }
    dp[state] = 0;
    
    for(int current = state; current < 1 << N; current++){
        if(dp[current] == 1000000000) continue;
        for(int i = 0; i < N; i++){
            if(!(current & 1 << i)) continue;
            for(int j = 0; j < N; j++){
                if(i == j) continue;
                dp[current | 1 << j] = min(dp[current | 1 << j], dp[current] + power_stations[i][j]);
            }
        }
        
    }
    
    int result = 1000000000;
    
    for(int i = 0; i < 1 << N; i++){
        int cnt = 0;
        
        if(dp[i] == 1000000000) continue;
        for(int j = 0; j < N; j++){
            cnt += (i & (1 << j)) ? 1 : 0;
        }
        
        if(cnt >= p) result = min(result, dp[i]);
        
    }
    
    if(result == 1000000000) cout << -1;
    else cout << result;
    
    
    
    return 0;
}

[BOJ] 발전소
https://compy07.github.io/Blog/posts/boj/1102/
Author
뒹굴뒹굴 이정훈 공부방
Published at
2025-10-04