forDevLife
[백준] 2798 - 블랙잭 본문
브루트포스 - DFS로, 전체 겹치지 않는 부분집합(원소 3개)을 만들어 모두 비교해 봐야 한다.
DFS를 통해 겹치지 않는 원소의 집합 찾는 방법은 항상 유용하니 외우자.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int[] arr;
static int[] tmp;
static int max;
static int M;
public static void DFS(int L, int S) {
if (L == 3) {
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += tmp[i];
}
if(sum <= M) {
max = Math.max(max, sum);
}
} else {
for (int i = S; i < arr.length; i++) {
tmp[L] = arr[i];
DFS(L + 1, i + 1);
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N];
tmp = new int[3];
max = Integer.MIN_VALUE;
st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
DFS(0, 0);
System.out.println(max);
}
}
'알고리즘' 카테고리의 다른 글
[백준] 18111 - 마인크래프트 (0) | 2021.06.17 |
---|---|
[백준] 11866 - 요세푸스 문제 0 (0) | 2021.06.17 |
[백준] 2609 - 최대공약수와 최소공배수 (0) | 2021.06.16 |
[백준] 1978 - 소수 찾기 (0) | 2021.06.15 |
[백준] 1920 - 수 찾기 (0) | 2021.06.15 |
Comments