https://www.acmicpc.net/problem/2961

 

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

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

www.acmicpc.net

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	static int N, recipe[][], answer = Integer.MAX_VALUE;
	static boolean isSelected[];

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		N = Integer.parseInt(st.nextToken());
		recipe = new int[N][2];
		isSelected = new boolean[N];

		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < 2; j++) {
				recipe[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		subset(0, 1, 0);
		System.out.println(answer);
	}

	public static void subset(int cnt, int S, int B) {
		if (cnt == N) {

			int select = 0;
			for (int i = 0; i < N; i++) {
				if (isSelected[i]) {
					select++;
				}
			}

			if (select > 0) {
				answer = Math.min(answer, Math.abs(S - B));
			}
			return;
		}

		isSelected[cnt] = true;
		subset(cnt + 1, S * recipe[cnt][0], B + recipe[cnt][1]);
		isSelected[cnt] = false;
		subset(cnt + 1, S, B);
	}
}

+ Recent posts