BJ 2961道英で作ったグルメ
14810 ワード
https://www.acmicpc.net/problem/2961
各食品の酸味と苦味の合成演算と積演算を組み合わせて算出し,2つの値の最小値を出力した.
組合せを再帰関数で実現できれば容易に解決できる.
各食品の酸味と苦味の合成演算と積演算を組み合わせて算出し,2つの値の最小値を出力した.
組合せを再帰関数で実現できれば容易に解決できる.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int N, R, minGap, multi, sum; // 차이, 곱(신맛), 합(쓴맛).
static int[][] input;
static int[] numbers;
static BufferedReader br;
static BufferedWriter bw;
static StringTokenizer st;
public static void combination(int cnt, int start) { // 현재 자리에 수 뽑기.
if(cnt == R) {
int gap = Math.abs(multi - sum);
if(gap < minGap) {
minGap = gap;
}
//System.out.println(Arrays.toString(numbers));
return;
}
// 입력받은 모든 수를 현재 자리에 넣어보기(유도파트)
for(int i = start; i < N; i++) {
multi *= input[i][0];
sum += input[i][1];
combination(cnt + 1, i + 1);
multi /= input[i][0];
sum -= input[i][1];
}
}
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
input = new int[N][2];
numbers = new int[N];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
input[i][0] = Integer.parseInt(st.nextToken());
input[i][1] = Integer.parseInt(st.nextToken());
}
minGap = Math.abs(input[0][0] - input[0][1]);
for(int i = 1; i <= N; i++) {
multi = 1;
sum = 0;
R = i;
combination(0, 0);
}
System.out.println(minGap);
}
}
Reference
この問題について(BJ 2961道英で作ったグルメ), 我々は、より多くの情報をここで見つけました https://velog.io/@mraz0210/BJ2961-도영이가-만든-맛있는-음식テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol