Что такое дерево повторения для проблемы BuySellStock? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть конкретная c проблема. Я пытаюсь решить проблему LeetCode 121 . Согласно LeetCode, это проблема динамического программирования c, но все упоминали, что она не требует DP. Однако, чтобы понять DP, я хочу решить его, используя DP, рекурсию с помощью грубой силы и Memoization. Я написал код рекурсивного перебора следующим образом:

int maxProfit(int prices[], int buyIndex, int curIndex, int N) {
      if (N <= 0) {
          return 0;
      }
      int p1 = INT_MIN;
      int p2 = INT_MIN;
      int p3 = INT_MIN;


      if (buyIndex == -1) {
        // Can buy now
        p1 = maxProfit(prices, curIndex, curIndex+1, N-1);
      }else{
        // Can sell now
        p2 = prices[curIndex] - prices[buyIndex];
      }

      // Ignore both buy ans sell
      p3 = maxProfit(prices, buyIndex, curIndex+1, N-1);

      return max(p1, max(p2, p3));
  }

  int maxProfit(int prices[], int N) {
      return maxProfit(prices, -1, 0, N);
  }

Он отлично работает для всех тестовых случаев, но, как и ожидалось, он дает TLE для большого ввода. Я понимаю, почему это дает TLE. Теперь, чтобы уменьшить количество рекурсивных вызовов, я собираюсь использовать запоминание, но я не могу определить переменную, управляющую состоянием, или, другими словами, по каким значениям я должен создать таблицу повторений? Если кто-то может нарисовать дерево повторений, это поможет мне понять код и размер таблицы.

Заранее спасибо.

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