これはよりアルゴリズムのレビューです:-
問題 : 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;
}