Skip to content

Commit ccdc286

Browse files
authored
[20250720] BOJ / G4 / 다이어트 / 이강현
1 parent b1da5ea commit ccdc286

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
```java
2+
import java.util.*;
3+
import java.io.*;
4+
5+
public class Main{
6+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
7+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
8+
static StringTokenizer st;
9+
static int N;
10+
static int[] minimumCond = new int[4];
11+
static int[][] food;
12+
static int[] cost;
13+
14+
public static void main(String[] args) throws Exception {
15+
N = Integer.parseInt(br.readLine());
16+
17+
st = new StringTokenizer(br.readLine());
18+
for (int i = 0; i < 4; i++) {
19+
minimumCond[i] = Integer.parseInt(st.nextToken());
20+
}
21+
22+
food = new int[N][5];
23+
for (int i = 0; i < N; i++) {
24+
st = new StringTokenizer(br.readLine());
25+
food[i][0] = Integer.parseInt(st.nextToken()); //단백질
26+
food[i][1] = Integer.parseInt(st.nextToken()); //지방
27+
food[i][2] = Integer.parseInt(st.nextToken()); //탄수화물
28+
food[i][3] = Integer.parseInt(st.nextToken()); //비타민
29+
food[i][4] = Integer.parseInt(st.nextToken()); //가격
30+
}
31+
int ans = Integer.MAX_VALUE;
32+
String state = "";
33+
cost = new int[1<<N];
34+
loop:for (int i = 1; i < (1<<N); i++) {
35+
int[] sum = new int[5];
36+
for (int j = 0; j < N; j++) {
37+
if((i & (1<<j)) != 0){
38+
for (int k = 0; k < 5; k++) {
39+
sum[k] += food[j][k];
40+
}
41+
}
42+
}
43+
for (int k = 0; k < 4; k++) {
44+
if(sum[k] < minimumCond[k]) continue loop;
45+
}
46+
if(ans > sum[4]){
47+
ans = sum[4];
48+
state = stateToStr(i);
49+
50+
}else if(ans == sum[4]){
51+
String temp = stateToStr(i);
52+
if(state.compareTo(temp) > 0){
53+
state = temp;
54+
}
55+
}
56+
57+
}
58+
if(ans == Integer.MAX_VALUE){
59+
bw.write("-1\n");
60+
}else{
61+
bw.write(ans+"\n"+state);
62+
}
63+
bw.close();
64+
}
65+
static String stateToStr(int state){
66+
StringBuilder sb = new StringBuilder();
67+
for (int i = 0; i < N; i++) {
68+
if((state & (1<<i)) != 0){
69+
sb.append(i+1).append(" ");
70+
}
71+
}
72+
return sb.toString();
73+
}
74+
}
75+
```

0 commit comments

Comments
 (0)