int max_val(int l) {
// input l
int val[] = {1, 5, 8, 9, 10, 17, 17, 20, 24, 30};
if (l == 0)
return 0;
auto q = INT16_MIN;
for (auto i = 0; i < l; i++) {
q = std::max(q, val[i] + max_val(l - i - 1));
std::cout << " " << q;
// ----->1
}
std::cout << " " << q;
// ----->2
}
Я пытался это сделать, и в точках 1 и 2 (отмеченных ----->
) вывод - очень длинное число, и я не получаю правильный вывод, когда выполняется таким образом для всех предыдущих рекурсивных задач. Если я удаляю вывод q
и возвращаю q
в конце, код работает правильно.
Цель состоит в том, чтобы максимизировать значение для данной длины стержня. Может кто-нибудь объяснить, пожалуйста, что не так в этом. val
- это массив значений для каждой части стержня, т. Е. 1 единица значения 1, 2 единицы значения от 5 и c до 10, а буква l
- длина ввода стержня. Заранее спасибо.