<Algorithm> 133. 동철이의 일분배(SWExpert)
by BFine반응형
1. 동철이의 일분배(SWExpert)
DFS 탐색 문제
처음에 모든 경우를 탐색했을때는 시간초과가 발생해서 max값이 될 수 없는 (곱하면 작아지는 확률) 것은 탐색하지 않으니 통과했다.
또 6자리 뒤에 0이 안붙으면 fail이 나서 소수점 여섯자리를 다 표시해 주어야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import java.util.Arrays; import java.util.Scanner; import java.util.stream.Stream; public class Solution { public static boolean[] visited; public static void main(String[] args) { Scanner sc = new Scanner(System.in); int T = sc.nextInt(); /****************************** * DFS 탐색을 이용하여 선택하는 모든 경우를 * 탐색한다. 이때 max 값이 될 수 없는 경우는 * 탐색하지 않는다. *******************************/ for(int t = 1; t <= T; t++) { int N = sc.nextInt(); double[][] arr = new double[N][N]; for(int i = 0; i < N; i++) { for(int j = 0; j < N; j++) { arr[i][j] = sc.nextInt()*0.01; } } visited = new boolean[N]; max = -1; req(0, N, arr, 1); max = max*100; System.out.println("#"+t+" "+String.format("%.6f", max)); } } static double max; public static void req(int deep,int N, double[][] arr , double total) { if( total <= max ) return; if(deep == N) { max = Math.max(max, total); return; } for(int i = 0; i < N; i++) { if(!visited[i]) { visited[i] = true; req(deep+1, N, arr, total*arr[deep][i]); visited[i] = false; } } } } | cs |
참고 & 출처
반응형
'공부(2018~2019) - 스킨변경전 > Algorithm' 카테고리의 다른 글
<Algorithm> 135. 빠른 휴대전화 키패드 (SWExpert) (0) | 2019.03.22 |
---|---|
<Algorithm> 134. 아기상어(BJO) (0) | 2019.03.17 |
<Algorithm> 132. 동아리실 관리하기(SWExpert) (0) | 2019.03.14 |
<Algorithm> 131. 최대상금(SWExpert) (0) | 2019.03.11 |
<Algorithm> 130. 하나로(SWExpert) (0) | 2019.03.09 |
블로그의 정보
57개월 BackEnd
BFine