package od;
import java.util.Arrays;
import java.util.Scanner;
public class Wonderland是小王居住地一家受欢迎的游乐场 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 初始化售票价格数组和游玩日期数组
int[] costs = new int[4];
int[] days;
// 输入售票价格数组
String[] costsInput = scanner.nextLine().split(" ");
for (int i = 0; i < 4; i++) {
costs[i] = Integer.parseInt(costsInput[i]);
}
// 输入游玩日期数组
String daysInput = scanner.nextLine();
String[] daysStrArr = daysInput.split(" ");
days = Arrays.stream(daysStrArr).mapToInt(Integer::parseInt).toArray();
// 计算完成游玩计划的最低消费
int minCost = minCostTickets(costs, days);
System.out.println(minCost);
scanner.close();
}
// 计算完成游玩计划的最低消费方法
public static int minCostTickets(int[] costs, int[] days) {
int n = days.length;
int[] dp = new int[366]; // 动态规划数组
boolean[] travel = new boolean[366]; // 标记游玩日期
// 标记游玩日期
for (int day : days) {
travel[day] = true;
}
// 动态规划计算最低消费
for (int i = 1; i <= 365; i++) {
if (!travel[i]) {
dp[i] = dp[i - 1];
continue;
}
dp[i] = dp[i - 1] + costs[0]; // 单日票消费
dp[i] = Math.min(dp[i], dp[Math.max(0, i - 1)] + costs[0]); // 比较一日票
dp[i] = Math.min(dp[i], dp[Math.max(0, i - 3)] + costs[1]); // 比较三日票
dp[i] = Math.min(dp[i], dp[Math.max(0, i - 7)] + costs[2]); // 比较周票
dp[i] = Math.min(dp[i], dp[Math.max(0, i - 30)] + costs[3]); // 比较月票
}
return dp[365]; // 返回完成游玩计划的最低消费
}
}