File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed
Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change 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+ ```
You can’t perform that action at this time.
0 commit comments