Блог пользователя Renyxa

Автор Renyxa, история, 9 лет назад, По-английски

Hello. I solve DP problems. But I can't solve this problem. Please help me.

  • Проголосовать: нравится
  • -18
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится

I think this approach should work.

Let dp[i] denote the maximum number of events he can attend ending no later than the i-th minute, so that the (i+1)-th minute is obviously available. The base case is dp[0] = 0. Then we can loop from minute 1 to minute 30,000. You can do this by, for example, storing the starting minutes of each event ending at the i-th minute in vector a[i]. This way, you'll know what events you should consider. We have this:

Initially, dp[i] = dp[i-1], then dp[i] = max(dp[i], dp[a[i][j]-1]+1) for all i and j (1 <= i <= 30,000; j < a[i].size())

The overall complexity is O(N + 30,000).

Please let me know if there are any mistakes. Hope this helps :D