-
[1311] 할 일 정하기 1BOJ 2021. 11. 1. 03:49
https://www.acmicpc.net/problem/1311
1311번: 할 일 정하기 1
N명의 사람과 N개의 일이 있다. 각 사람은 일을 하나 담당해야 하고, 각 일을 담당하는 사람은 한 명 이어야 한다. 또한, 모든 사람은 모든 일을 할 능력이 있다. 사람은 1번부터 N번까지 번호가 매
www.acmicpc.net
<문제>
하나의 사람은 하나의 일만 할 수 있으므로 어떤 사람이 아직 일을 할당받지 못했는지를 비트로 표현한다.
depth와 1<<n을 인덱스로 넣어 메모이제이션 하기위한 2차원 dp를 사용했다.
<소스코드>
1234567891011121314151617181920212223#include <bits/stdc++.h>using namespace std;const int INF = 987654321;int n, a[20][20], dp[20][1 << 20];int f(int d, int bt) {if (d == n) return 0;if (dp[d][bt]) return dp[d][bt];int i;dp[d][bt] = INF;for (i = 0; i < n; i++) {if (bt & (1 << i)) continue;dp[d][bt] = min(a[d][i] + f(d + 1, bt | (1 << i)), dp[d][bt]);}return dp[d][bt];}int main(void) {cin >> n;int i, j;for (i = 0; i < n; i++)for (j = 0; j < n; j++) cin >> a[i][j];cout << f(0, 0);return 0;}cs 'BOJ' 카테고리의 다른 글
[17267] 상남자 (0) 2021.11.03 [2842] 집배원 한상덕 (0) 2021.11.02 [2302] 극장 좌석 (0) 2021.11.01 [15989] 1, 2, 3 더하기 4 (0) 2021.10.31 [23058] 뒤집기 게임 (0) 2021.10.31