制約を見て三乗想定かと思ったら二乗想定だった。
O(N2K)解
P1≤P2≤...≤PNと仮定してよい。また、f(i):= 映画iと同じpriorityを持つ映画の中でもっとも右にあるものの位置、とする。P0=0としておくと都合がよい。
dp[x][y][z]=x本映画を見た時点で、今までに見た映画で最もpriorityの高い映画の位置(タイは最初に見たものを優先)がyで、現在のexcitingnessがzであるような場合の数
でDPできる。
遷移について。x<f(y)ならexcitingでない映画がf(y)−x個あって
dp[x+1][y][z]+=(f(y)−x)dp[x][y][z]
excitingな映画y′=f(y)+1,f(y)+2,...,Nについては
dp[x+1][y′][z+1]+=dp[x][y][z]
素朴にやるとO(N3K)だが、累積和を取りながら遷移してO(N2K)。(Pi)のsuffixがタイになっている場合に、最後にそれらを全部足す必要があることに注意。
O(NK)解
Editorialを見たらO(NK)想定だった。同じpriorityの映画をまとめて、降順に挿入していけばよい。(リンク先参照)
Myers, Wilf. Left-to-right maxima in words and multiset permutations
discussionに載っていた論文。この問題とわずかに違って同じpriorityの映画は区別できない設定だが、考え方は同じで、区別できるようにするには各priorityの頻度の階乗を掛けるだけ。
よく考えるとこれはDEGwerさんの数え上げPDF(3.探索順の変更)に載っている典型とほぼ同じだった。