-
728x90반응형
출처: https://www.acmicpc.net/problem/1102
1102번: 발전소
은진이는 발전소에서 근무한다. 은진이가 회사에서 잠깐 잘 때마다, 몇몇 발전소가 고장이난다. 게다가, 지금 은진이의 보스 형택이가 은진이의 사무실로 걸어오고 있다. 만약 은진이가 형택이가 들어오기 전까지 발전소를 고쳐놓지 못한다면, 은진이는 해고당할 것이다. 발전소를 고치는 방법은 간단하다. 고장나지 않은 발전소를 이용해서 고장난 발전소를 재시작하면 된다. 하지만, 이때 비용이 발생한다. 이 비용은 어떤 발전소에서 어떤 발전소를 재시작하느냐에 따라 다르다
www.acmicpc.net
비트마스킹와 메모이제이션을 활용한 문제
켜져있는 발전소들을 기준으로 계속해서 꺼져있는 발전소을 가동시켜야 하는 문제이며 꺼져있던 발전소가 켜지게 된다면 그 발전소로도 다른 발전소들을 가동시키는 것이 가능해진다.
재귀를 활용한 메모이제이션을 적용하였고 점화식과 종료조건은 다음과 같고 메모를 활용하기 위한 dp배열은
dp[가동시킨 공장 수][ 어떤 공장들을 켰는지 (비트마스킹으로 )]표현 하였다.
점화식
n개의 발전소를 가동시키는데에 든 비용 = MIN(n개의 발전소를 가동시키는 데에 든 비용 or (n-1)개까지 가동시키는 데에 든 비용 + 현재 켜야할 발전소 비용)
종료조건
켜져있는 발전소(cnt)가 p개 이상이면 종료한다.
이미 가동 시켰던 공장이면 (방문했던곳이면) 메모를 해둔다.
소스코드
728x90반응형'Code > BOJ' 카테고리의 다른 글
#2933 미네랄 (0) 2019.12.31 #2213 트리의 독립집합 (0) 2019.12.30 #17822 원판 돌리기 (0) 2019.12.25 #1520 내리막길 (0) 2019.12.19 #2668 숫자 고르기 (0) 2019.12.17