Как решить неправильный вывод в проблеме резки стержня - PullRequest
0 голосов
/ 26 марта 2020
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 - длина ввода стержня. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...