这更像是算法审查:-
问题:给定假期作为整数列表,介于 0-364 和可用的叶子数 N,如何最大化 X 假期中的天数,其中假期是一个日期范围,其中包含该范围内的假期和范围内的其余部分使用树叶。
我相信以下使用 getMaxVacations(X, 0, 364, N) 的伪代码可能适用于一些小的修复和优化,但我正在寻找其他方法来可视化问题,不一定更快。
available_leaves (N) = 5
holidays = [7, 14, 20, 21, 35, 36]
getMaxVacation (X, start, end, N) {
if X = 0 return 0;
for (d : end to start + 1) {
for (leave : N to 1)
total = bestSingleVacation(start, d, leave) + getMaxVacation(X-1, d, end, N-leave);
if max < total
max = total
return max
}
bestSingleVacation(start, end, leaves_to_use) {
maxVacationSize = leaves_to_use
for (i : start; i < end-maxVacationSize; i++) {
for (j : i ; j < leaves_to_use) {
if (!holidays.contains(j)) j++; // use the leave
}
if (maxVacationSize < j-i) maxVacationSize = j-i;
}
return maxVacationSize;
}