From 991e3d8961ec60340e6669c5eb3e0b1f3da1453b Mon Sep 17 00:00:00 2001 From: Jinyeong Seol Date: Wed, 16 Jul 2025 22:38:06 +0900 Subject: [PATCH] =?UTF-8?q?[20250716]=20BOJ=20/=20G4=20/=20=EB=8B=A4?= =?UTF-8?q?=EC=9D=B4=EC=96=B4=ED=8A=B8=20/=20=EC=84=A4=EC=A7=84=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...44\354\235\264\354\226\264\355\212\270.md" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "Seol-JY/202507/16 G4 \353\213\244\354\235\264\354\226\264\355\212\270.md" diff --git "a/Seol-JY/202507/16 G4 \353\213\244\354\235\264\354\226\264\355\212\270.md" "b/Seol-JY/202507/16 G4 \353\213\244\354\235\264\354\226\264\355\212\270.md" new file mode 100644 index 00000000..e621cd22 --- /dev/null +++ "b/Seol-JY/202507/16 G4 \353\213\244\354\235\264\354\226\264\355\212\270.md" @@ -0,0 +1,65 @@ +```java +import java.io.*; +import java.util.*; + +public class Main { + static int N; + static int mp, mf, ms, mv; + static int[][] foods; + static int minCost = Integer.MAX_VALUE; + static List result = new ArrayList<>(); + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + N = Integer.parseInt(br.readLine()); + + StringTokenizer st = new StringTokenizer(br.readLine()); + mp = Integer.parseInt(st.nextToken()); + mf = Integer.parseInt(st.nextToken()); + ms = Integer.parseInt(st.nextToken()); + mv = Integer.parseInt(st.nextToken()); + + foods = new int[N][5]; + for (int i = 0; i < N; i++) { + st = new StringTokenizer(br.readLine()); + for (int j = 0; j < 5; j++) { + foods[i][j] = Integer.parseInt(st.nextToken()); + } + } + + backtrack(0, 0, 0, 0, 0, 0, new ArrayList<>()); + + if (minCost == Integer.MAX_VALUE) { + System.out.println(-1); + } else { + System.out.println(minCost); + for (int i = 0; i < result.size(); i++) { + if (i > 0) System.out.print(" "); + System.out.print(result.get(i)); + } + System.out.println(); + } + } + + static void backtrack(int idx, int protein, int fat, int carbo, int vitamin, + int cost, List selected) { + if (protein >= mp && fat >= mf && carbo >= ms && vitamin >= mv) { + if (cost < minCost) { + minCost = cost; + result = new ArrayList<>(selected); + } + return; + } + + if (idx == N || cost >= minCost) return; + + selected.add(idx + 1); + backtrack(idx + 1, protein + foods[idx][0], fat + foods[idx][1], + carbo + foods[idx][2], vitamin + foods[idx][3], + cost + foods[idx][4], selected); + selected.remove(selected.size() - 1); + + backtrack(idx + 1, protein, fat, carbo, vitamin, cost, selected); + } +} +```