Сначала, переберите все гвозди и создайте ха sh H
, в котором хранится количество гвоздей для каждого размера. Для [1,2,2,3,3,3,4,4,4] H
должно быть:
size count
1 : 1
2 : 2
3 : 3
4 : 3
Теперь создайте небольшой алгоритм для оценки максимальной суммы для каждого размера S
, учитывая Y
:
BestForSize(S, Y){
total = H[S]
while(Y > 0){
S++
if(Y >= H[S] and S < biggestNailSize){
total += H[S]
Y -= H[S]
}
else{
total += Y
Y = 0
}
}
return total;
}
Ваш ответ должен быть max(BestForSize(0, Y), BestForSize(1, Y), ..., BestForSize(maxSizeOfNail, Y))
.
Сложность O (n²). Совет по оптимизации - начать с конца. Например, после того, как у вас есть максимальное значение гвоздей в размере 4, как вы можете использовать свой ответ, чтобы найти максимальное количество в размере 3?