Skip to content

Commit 376c7ea

Browse files
authored
[20250925] BOJ / G1 / 할 일 정하기 1 / 이강현
1 parent 2f6d910 commit 376c7ea

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
```java
2+
import java.util.*;
3+
import java.io.*;
4+
5+
public class Main{
6+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
static StringTokenizer st;
9+
static StringBuilder sb = new StringBuilder();
10+
static int N;
11+
static int[][] works;
12+
static int[][] dp; //dp[i][j] = i번째 사람까지 고려하고 j의 일 상태일때 최소비용
13+
14+
public static void main(String[] args) throws Exception {
15+
N = Integer.parseInt(br.readLine());
16+
works = new int[N+1][N+1];
17+
18+
for (int i = 1; i <= N; i++) {
19+
st = new StringTokenizer(br.readLine());
20+
for (int j = 1; j <= N; j++) {
21+
works[i][j] = Integer.parseInt(st.nextToken());
22+
}
23+
}
24+
25+
dp = new int[N+1][1<<N];
26+
27+
for (int i = 0; i <= N; i++) {
28+
Arrays.fill(dp[i], Integer.MAX_VALUE);
29+
}
30+
dp[0][0] = 0;
31+
32+
for (int i = 1; i <= N; i++) {
33+
for (int mask = 0; mask < (1<<N); mask++) {
34+
for (int j = 1; j <= N; j++) {
35+
if((mask & 1<<(j-1)) != 0){ // i가 일할라는데 j번째 일을 누가 한 경우에만 비교
36+
int prevMask = mask ^ 1<<(j-1); //j번째 일 비할당으로 만들기
37+
if(dp[i-1][prevMask] != Integer.MAX_VALUE){
38+
dp[i][mask] = Math.min(dp[i][mask], dp[i-1][prevMask] + works[i][j]);
39+
}
40+
}
41+
}
42+
}
43+
}
44+
bw.write(dp[N][(1<<N)-1]+"");
45+
bw.close();
46+
}
47+
48+
}
49+
```

0 commit comments

Comments
 (0)