solution.java
package D0926;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class P1952_수영장 {
static int[] pay;
static int[] days;
static int min;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // test case 수
for (int tc = 1; tc <= T; tc++) {
String s[] = br.readLine().split(" ");
pay = new int[4]; // 수영장 이용권
for(int i=0; i<4; i++) { // 하루, 한달, 3달, 1년
pay[i] = Integer.parseInt(s[i]);
}
String s2[] = br.readLine().split(" ");
days = new int[12]; // 1년은 12달 !
for(int i=0; i<12; i++) {
days[i] = Integer.parseInt(s2[i]);
} // 입력 완료
min = Integer.MAX_VALUE;
dfs(0,0);
// 최종적으로 1년치랑 비교
min = Math.min(min, pay[3]);
System.out.println("#"+tc+" "+min);
} // test case end
}
private static void dfs(int cnt, int money) {
if(cnt>=12) {
min = Math.min(min, money);
return;
}
if(days[cnt]==0) { // 0일 때는 구매이용권을 사지 않는다 !
dfs(cnt+1, money);
}else {
dfs(cnt+1, money+(days[cnt]*pay[0])); // 하루
dfs(cnt+1, money+pay[1]); // 한 달
dfs(cnt+3, money+pay[2]); // 세 달
}
} // main end
}