(백준 2961) 도영의 맛있는 음식 요약(자바)

가면을 조금수업 조합 알고리즘사용

1) 재료로 만들 수 있는 조합 신맛수업 격렬한모든 것을 계산하다

2) 후 신맛수업 격렬한의 차이 값을 찾고 가장 작은 값을 찾습니다.

for(int() d : dp) {
    d(0) = 1; //신맛 (곱해야해서 1로 초기화)
    d(1) = 0; //쓴맛 (더해야해서 0으로 초기화) 
}
public static void dyCook(int()() dp, int() sour, int() bitter, int visited, int N) {
    for(int i = 1; i < (1 << N); i++) { //1(2) 부터 1111...1(2)까지 
        for(int j = 0; j < N; j++) { //각 재료에 대해
            if((i & (1 << j)) != 0) { //i에 j가 들어가 있으면  
                dp(i)(0) *= sour(j); 
                dp(i)(1) += bitter(j);
            }
        }
    }
}

(완전한 코드)

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

public class Main {
	public static void dyCook(int()() dp, int() sour, int() bitter, int visited, int N) {
		for(int i = 1; i < (1 << N); i++) {
			for(int j = 0; j < N; j++) {
				if((i & (1 << j)) != 0) {
					dp(i)(0) *= sour(j);
					dp(i)(1) += bitter(j);
				}
			}
		}
	}
	
    public static void main(String() args) {
        int N;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        try
        {
            N = Integer.parseInt(br.readLine());
            int() sour = new int(N);
            int() bitter = new int(N);
            int()() dp = new int((1 << N))(2);
            
            for(int() d : dp) {
    			d(0) = 1;
    			d(1) = 0;
    		}
            
            for(int i = 0; i < N; i++) {
            	st = new StringTokenizer(br.readLine());
            	sour(i) = Integer.parseInt(st.nextToken());
            	bitter(i) = Integer.parseInt(st.nextToken());
            }
            
            dyCook(dp, sour, bitter, 0, N);
            
            int min = 1000000000;
            int cookedVal = 0;
            
            for(int i = 1; i < (1 << N); i++) {
            	cookedVal = Math.abs(dp(i)(0) - dp(i)(1));
            	if(cookedVal < min) min = cookedVal;
            }
            
            bw.write(Integer.toString(min));
            bw.flush();
            bw.close();
            br.close();
        }catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}