2020年4月12日日曜日

ABC 162 F - Select Half

前の整数を取ったら、次の整数は取れないし、前の整数を取らなかったらだいたい次の整数を取る必要があることに注目してDPする。

後者の場合は必ずしも取らないといけないわけではなく、何回かはパスする必要がある。NNが偶数の場合はちょうど1回パスするべきで、NNが奇数の場合はちょうど2回パスするべきである。したがって

dp[x][y][z]:=\operatorname{dp}[x][y][z] := a1,...,axa_1, ..., a_xまで見て、整数axa_xを取り(y=1)(y=1)/取らず(y=0)(y=0)、今までにパスした回数がzzである場合の最大値

としてDPすればよい。ただし例外として、最後の整数aNa_Nを取らなかった場合はパスしたとみなす必要がある。