www.acmicpc.net/problem/2961

 

2961번: 도영이가 만든 맛있는 음식

첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은

www.acmicpc.net

브루트포스 방식으로 모든 경우를 다 계산해주시면 됩니다.

N개 중에 뽑는 갯수가 정해져있지 않기때문에 조합이 아닌 부분집합으로 재료를 고를때마다 ans를 갱신해줍니다.

 

 

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
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static long list[][];
    static long ans = Long.MAX_VALUE;
    static int N;
 
    static void func(int idx, long a, long b) {
        if (idx > 0)
            ans = Math.min(ans, Math.abs(a - b));
        
        if (idx == N)
            return;
 
        for (int i = idx; i < N; i++) {
            func(i + 1, a * list[i][0], b + list[i][1]);
        }
    }
 
    static void input() throws Exception {
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        list = new long[N][2];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            list[i][0= Long.parseLong(st.nextToken());
            list[i][1= Long.parseLong(st.nextToken());
        }
    }
 
    public static void main(String[] args) throws Exception {
        input();
        func(010);
        System.out.println(ans);
    }
}
cs

 

+ Recent posts