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

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

I was trying to solve this problem form recent Atcoder's beginner contest , but after scratching my head for almost 2h I could not come up with the solution.Then I tried to look for the editorials but this time they were not in English. square1001 has provided solution there which I find uses some kind of DP. Can anyone who has solved this problem explain DP recurrence behind this ?

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

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

I also want to know the recurrence

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

Short Answer

dp[k][h] := the answer if (K, H) = (k, h); W is fixed
dp[k][h] can be calculated by dp[k-1][h-1], dp[k][h-1] and dp[k+1][h-1]

Full Answer

dp is written as A in editorial.
We want to calculate dp[K][H].

I'll call horizontal line that lies on a-th and b-th vertical line (a, b).

First, dp[1][0] = 1, dp[2][0] = dp[3][0] = ... = dp[W][0] = 0 because there's no horizontal line.

Second, think when calculating h = i. Note that we already know dp[any][i - 1].
For each k = a, there's 3 choices; go straight, go right, or go left.

go straight

We can make neither (a, a + 1) nor (a - 1, a).

dp[a][i] += dp[a][i-1] * (no. of ways to make pairs that doesn't affect the above pairs; editorial call it Y)

NOTE : Y is no. of ways to make pairs whose y-coordinate = i. The others (whose coordinate < i) are counted by dp[a][i - 1].

go left

We should make (a - 1, a), and can make neither (a - 2, a - 1) nor a(a, a + 1).

dp[a-1][i] += dp[a][i-1] * (no. of ways to make pairs that doesn't affect the above pairs; editorial call it X)

go right

same as left. Define Z similarly.


Okay, now we want to calculate X, Y and Z for each k.

X, Y and Z can be calculated by brute force (O(2W)).

You can get AC now.

Editorial introduce the way to speed up using Fibonacci sequence.

Speeding up that my solution uses is like it.

Main idea of DP is same.

https://beta.atcoder.jp/contests/abc113/submissions/3715464

I wrote some comments in English to clarify.

  • »
    »
    4 года назад, # ^ |
    Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

    Luma what does you DP[k][h] signify? does it mean number of ways to get to K'th vertical wall and at the H'th horizontal position?