Renyxa's blog

By Renyxa, history, 9 years ago, In English

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

  • Vote: I like it
  • -18
  • Vote: I do not like it

»
9 years ago, # |
  Vote: I like it +7 Vote: I do not like it

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