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

Автор start_over, история, 8 месяцев назад, По-английски

There are N points and M segments, the ith point is located at p[i] and the ith segment's size is s[i]. What is the maximum number of points that can be covered by these segments?

My current solution is O(N * 2^M * M). Is there any better solution?

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

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by start_over (previous revision, new revision, compare).

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by start_over (previous revision, new revision, compare).

»
8 месяцев назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

can you provide the link to the problem

  • »
    »
    8 месяцев назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    No. I'm preparing some problems for our company contest and I came up with this problem.

»
8 месяцев назад, # |
  Проголосовать: нравится +1 Проголосовать: не нравится

I think you solution is something like this:

Let's sort points, then do this DP:

$$$dp(i, msk) =$$$ Maximum number of points $$$\leq p_i$$$, where $$$msk$$$ is a bitmask of used segments.

$$$dp(i, msk) = min(dp(i-1, msk), dp(lowerbound(i-sz_j), msk \oplus 2^j))$$$