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

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

I seriously need help on this 510D - Fox And Jumping ,can anybody give a detailed solution of this problem.

Thanks a lot in advance!

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

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

What did you not understand?

Basically, we need to select any subset of numbers such that the GCD of their l-values is 1. This comes from Bezout's identity. If ax+by=c and c=1, then from any given position, we can move to the immediate adjacent left or right position using some combination of moves.

Now, since n<=300, we can use DP to get the minimum cost of such a subset. We need to maintain the current index and the GCD till now in our DP state. Since l <= 1e9, this will take a lot of memory. But notice that if we fix the first element of our subset, the GCD is always a subset of of the set of its prime factors. Any number <= 1e9 has atmost 9 different prime factors, so you can just use a bitmask (of size 2^9) to represent it. This reduces the space complexity.

Total time complexity = O(n*n*2^9)

Code — I did not use bitmasks in my code but rather a map to store the actual GCD. :)