[伯俊]2961道英が作ったグルメ(シルバー1)
白駿(シルバー1)-2961.道英が作った美食(銀色1)
これは部分集合を利用して簡単に解決できる問題です!
変数の範囲と積が1から始まることと0から始まることに注意し、共通セットを除外すればよい.
Math.abs();
に答える
これは部分集合を利用して簡単に解決できる問題です!
変数の範囲と積が1から始まることと0から始まることに注意し、共通セットを除外すればよい.
package com.study.classAlgo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ2961 {
public static long[] s,b;
public static int n;
public static long min = 1000000000;
public static boolean[] isSelected;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
s = new long[n];
b = new long[n];
StringTokenizer st ;
isSelected = new boolean[n];
for(int i=0; i<n; i++) {
st = new StringTokenizer(br.readLine());
s[i] = Long.parseLong(st.nextToken());
b[i] = Long.parseLong(st.nextToken());
}
subset(0,1,0);
System.out.println(min);
}
//신맛은 곱
//쓴맛은 합
public static void subset(int i, long sSum, long bSum) {
if(i==n) {
int selectedCnt = 0;
for(int j=0; j<n; j++) {
if(isSelected[j]) {
selectedCnt++;
}
}
if(selectedCnt>0) {
min = Math.min(min, Math.abs(sSum-bSum));
}
return;
}
//재료를 골랐을 경우
isSelected[i] = true;
subset(i+1, sSum*s[i],bSum+b[i]);
//재료를 고르지 않았을 경우
isSelected[i] = false;
subset(i+1,sSum,bSum);
}
}
Java割引Math.abs();
Reference
この問題について([伯俊]2961道英が作ったグルメ(シルバー1)), 我々は、より多くの情報をここで見つけました https://velog.io/@humblechoi/백준-2961.-도영이가-만든-맛있는-음식실버1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol