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); + } +} +```