Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- #백준 #드래곤커브 #알고리즘
- 알고리즘
- sed명령어
- #데이터베이스 #트랜잭션 #ACID #격리수준
- django 슬랙봇
- innodb_buffer_pool_size 오류
- #알고리즘
- 데이터베이스 오류
- django slack bot
- 숲을 바라보는 개발자
- 슬랙봇
- django slack
- AWS Aurora
- 개발자와 비즈니스 관계
- django #django 5.0 #django 5.0 요약
- 비즈니스적 관점에서 생각하는 개발자
- public.pem
- 비즈니스적 관점에서 생각하는 개발자 #개발자 마인드
- slack bot
- 정렬
- 개발자에세이
- 개발자의 마인드
- private.pem
- ssl.key
- MySQL
- 개발자와 비즈니스
- 비즈니스
- 웹소켓 api
- 업비트 웹소켓
- add colume
Archives
- Today
- Total
Info-Tech
스타트와 링크 14899번 문제 본문
이 문제는 브루트포스 (완전탐색)으로 해결 할 수 있다.
N= 6 으로 입력 된 경우 해당 3개씩 나눠서 조합을 구해보면 된다.
0 1 2 3 4 5
1 0 2 3 4 5
1 2 0 3 4 5
1 2 3 0 4 5
1 2 3 4 0 5
1 2 3 4 5 0
(1,3,6) ( 2,4,5)
a[1][3] = 2
a[1][6] = 5
a[3][6] = 5
a[3][1] = 1
a[6][1] = 1
a[6][3] = 3
=== 17=====
a[2][4] = 3
a[2][5] = 4
a[4][5] = 4
a[4][2] = 2
a[5][2] = 2
a[5][4] = 4
===19=======
이런경우 최소값은 2가 된다. 단순 dfs로 적절히 가지수가 나오게
for(int i=index; i<=n; i++) {
if(!check[i]) {
check[i] = true;
solve(i+1,depth+1);
check[i] = false;
}
}
이런식으로 백트래킹 처리를 해주었다.
전체코드
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 55 56 57 58 59 60 61 62 63 64 | import java.util.*; public class Main { static int arr[][]; static int n; static boolean check[]; static int total_min = Integer.MAX_VALUE; public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); n = sc.nextInt(); arr = new int [n+1][n+1]; check = new boolean[n+1]; for(int i=1; i<=n; i++) { for(int k=1; k<=n; k++) { arr[i][k] = sc.nextInt(); } } solve(1,0); System.out.println(total_min); } public static int get_a_min() { int mins = 0; for(int i=1; i<=n; i++) { if(!check[i]) continue; for(int k=1;k<=n; k++) { if(i==k) continue; if(check[i] && check[k]) { mins+= arr[i][k]; } } } return mins; } public static int get_b_min() { int mins = 0; for(int i=1; i<=n; i++) { if(check[i]) continue; for(int k=1;k<=n; k++) { if(i==k) continue; if(!check[i] && !check[k]) { mins+= arr[i][k]; } } } return mins; } public static void solve(int index, int depth) { if(depth == n/2) { // 최소값 구해주기 total_min = Math.min(total_min, Math.abs(get_a_min()-get_b_min())); } for(int i=index; i<=n; i++) { if(!check[i]) { check[i] = true; solve(i+1,depth+1); check[i] = false; } } } } | cs |
'백준문제풀이' 카테고리의 다른 글
파티 1238번 문제 (0) | 2018.10.25 |
---|---|
집합의 표현 - 1717번 문제 (0) | 2018.10.24 |
드래곤 커브 (0) | 2018.10.23 |
Comments