[PS] BOJ 19942 - λ€μ΄μ΄νΈ
νκ·Έ: PS, TIL, λ°±νΈλνΉ
μΉ΄ν κ³ λ¦¬: PS
λ¬Έμ μ€λͺ
μμ¬λ£ Nκ° μ€μμ λͺ κ°λ₯Ό μ νν΄μ μ΄λ€μ μμλΆ(λ¨λ°±μ§, νμνλ¬Ό, μ§λ°©, λΉνλ―Ό)μ΄ μΌμ μ΄μμ΄ λμ΄μΌ νλ€. μλ νμ μ μλ 6κ°μ§μ μμ¬λ£ μ€μμ λͺ κ°λ₯Ό μ νν΄μ μ΄λ€μ μμλΆμ κ°κ° ν©μ΄ μ΅μ 100, 70, 90, 10κ° λλλ‘ νλ κ²½μ°λ₯Ό μκ°ν΄λ³΄μ. μ΄ κ²½μ° λͺ¨λ μ¬λ£λ₯Ό μ ννλ©΄ μ½κ² ν΄κ²°λμ§λ§, μ°λ¦¬λ 쑰건μ λ§μ‘±μν€λ©΄μλ λΉμ©μ΄ μ΅μκ° λλ μ νμ νλ €κ³ νλ€.
μ¬λ£ | λ¨λ°±μ§ | μ§λ°© | νμνλ¬Ό | λΉνλ―Ό | κ°κ²© |
---|---|---|---|---|---|
1 | 30 | 55 | 10 | 8 | 100 |
2 | 60 | 10 | 10 | 2 | 70 |
3 | 10 | 80 | 50 | 0 | 50 |
4 | 40 | 30 | 30 | 8 | 60 |
5 | 60 | 10 | 70 | 2 | 120 |
6 | 20 | 70 | 50 | 4 | 40 |
μλ₯Ό λ€μ΄, μμ¬λ£ 1, 3, 5λ₯Ό μ ννλ©΄ μμλΆμ 100, 145, 130, 10μΌλ‘ 쑰건μ λ§μ‘±νμ§λ§ κ°κ²©μ 270μ΄ λλ€. λμ 2, 3, 4λ₯Ό μ ννλ©΄ μμλΆμ ν©μ 110, 130, 90, 10, λΉμ©μ 180μ΄ λλ―λ‘, μμ λ°©λ²λ³΄λ€λ λ λμ μ νμ΄ λλ€.
μ λ ₯μΌλ‘ μμ¬λ£ νκ° μ£Όμ΄μ‘μ λ, μ΅μ μμμ κΈ°μ€μ λ§μ‘±νλ μ΅μ λΉμ©μ μμ¬λ£ μ§ν©μ μ°ΎμμΌ νλ€.
μ λ ₯
첫 μ€μ μμ¬λ£μ κ°μ
λ€μ μ€μλ λ¨λ°±μ§, μ§λ°©, νμνλ¬Ό, λΉνλ―Όμ μ΅μ μμμ±λΆμ λνλ΄λ μ μ
μ΄μ΄μ§λ
μΆλ ₯
첫 λ²μ§Έ μ€μ μ΅μ λΉμ©μ μΆλ ₯νκ³ , λ λ²μ§Έ μ€μ 쑰건μ λ§μ‘±νλ μ΅μ λΉμ© μμ¬λ£μ λ²νΈλ₯Ό 곡백μΌλ‘ ꡬλΆν΄ μ€λ¦μ°¨μμΌλ‘ ν μ€μ μΆλ ₯νλ€. κ°μ λΉμ©μ μ§ν©μ΄ νλ μ΄μμ΄λ©΄ μ¬μ μμΌλ‘ κ°μ₯ λΉ λ₯Έ κ²μ μΆλ ₯νλ€.
쑰건μ λ§μ‘±νλ λ΅μ΄ μλ€λ©΄ -1μ μΆλ ₯νκ³ , λμ§Έ μ€μ μ무κ²λ μΆλ ₯νμ§ μλλ€.
νμ΄
μ΄ λ¬Έμ λ₯Ό νκΈ° μ μ
λ¬Έμ λ₯Ό λ¨Όμ νμ΄λ³΄λ κ²μ μΆμ²νλ€.
μ λ¬Έμ μ ν° νμ κ°λ€.
μμ¬λ£λ₯Ό μ ννκ±°λ μνκ±°λ λκ°μ§μ κ²½μ°μ μκ° μκ³ , κ° μμ¬λ£λ₯Ό μ ν μ λ€μ λ€μ μμ¬λ£μ λν΄ λκ°μ§ κ²½μ°μ μλ₯Ό νμνλ λ°©μμ dfs λ‘ νλ©΄λλ€.
λν, μ
λ ₯μΌλ‘ λ€μ΄μ€λ κ°μ λ²μκ° λ€λ₯΄λ€.
μ΄λ² λ¬Έμ μμλ 0 0 0 0 0
μ΄λ κ² μ
λ ₯λλ κ²½μ°μλ μ λ΅μΌλ‘ μΉ΄μ΄νΈνμ§ μμμΌ νλ€. μλμ κ°μ΄ μ
λ ₯λλ κ²½μ° λ§¨ 첫λ²μ§Έ μ¬λ£λ§ μΉ΄μ΄νΈνκ³ dfs λ₯Ό μ’
λ£ν΄μΌ νλ€.
1
2
3
4
5
6
7
8
9
3
0 0 0 1
0 0 0 1 1
0 0 0 0 0
0 0 0 0 0
// answer
1
1
μ€λ²λ¬Έμ νλμ κ°μ΄ dfs μ νμΆ μ‘°κ±΄μ μλμ²λΌ idx == N
λ‘ μ€μ νκ² λλ©΄ μ μμΈ μΌμ΄μ€μ κ²½μ° μ λ΅κ³Ό λ€λ₯Έ κ²°κ³Όκ° λμ€κ² λλ€.
1
2
3
4
5
6
7
8
9
if (idx == N) { // λͺ¨λ λ²μ μν ν 쑰건μ κ²μ¬νλ κ²½μ° μ£μ§ μΌμ΄μ€κΉμ§ μ λ΅μ ν¬ν¨μν¬ μ μλ€.
if (p >= mp && f >= mf && s >= ms && v >= mv) {
if (c < min) {
min = c;
result = new ArrayList<>(tmpResult);
}
}
return;
}
μ½λ
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
import java.util.ArrayList;
public class Boj_19942 {
static int N;
static ArrayList<int[]> arr;
static int mp, mf, ms, mv;
static int min = Integer.MAX_VALUE;
static ArrayList<Integer> result = new ArrayList<>();
static ArrayList<Integer> visited = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new ArrayList<>();
String[] split = br.readLine().split(" ");
mp = Integer.parseInt(split[0]);
mf = Integer.parseInt(split[1]);
ms = Integer.parseInt(split[2]);
mv = Integer.parseInt(split[3]);
for (int i = 0; i < N; i++) {
String[] nutrient = br.readLine().split(" ");
arr.add(new int[] {Integer.parseInt(nutrient[0]), Integer.parseInt(nutrient[1]), Integer.parseInt(nutrient[2]),
Integer.parseInt(nutrient[3]), Integer.parseInt(nutrient[4])});
}
dfs(0, 0, 0, 0, 0, 0);
if (min == Integer.MAX_VALUE) {
System.out.println(-1);
} else {
System.out.println(min);
for (Integer i : result) {
System.out.print(i + " ");
}
}
}
private static void dfs(int idx, int p, int f, int s, int v, int c) {
if (p >= mp && f >= mf && s >= ms && v >= mv) { // 쑰건 λ§μ‘±μ λ°λ‘ 리ν΄
if (c < min) {
min = c;
result = new ArrayList<>(visited);
return;
}
}
if (idx == N) {
return;
}
visited.add(idx + 1);
dfs(idx + 1, p + arr.get(idx)[0], f + arr.get(idx)[1], s + arr.get(idx)[2], v + arr.get(idx)[3], c + arr.get(idx)[4]);
visited.remove(visited.size() - 1); // λ°±νΈλνΉ
dfs(idx + 1, p, f, s, v, c);
}
}
λκΈλ¨κΈ°κΈ°