以下の内容はhttps://emtubasa.hateblo.jp/entry/2019/05/28/155509より取得しました。


ABC128 D - equeue

問題
提出コード

解法

Dから取り出した宝石をDに再び詰めた後、再びその宝石を取り出すのは、ただ操作回数を無駄にしているだけなので、先に取り出す宝石の個数を決めた後、捨てる宝石を全て捨てるのが最適になります。
Dの左から取り出す宝石の個数をi個、Dの右から取り出す宝石の個数をj個とします。
このとき、捨てる操作は合計でK-i-j回行うことができます。
左からi個、右からj個の宝石を取り出すとしたときに、残ったK-i-j回の操作で行う最適な「宝石を捨てる」操作は、

  • i+j個の宝石を昇順でソートし、前から最大K-i-j個、価値が負の宝石を選ぶ

となります。
この操作は、i個選ぶのが最大min(N,K)j個選ぶのが最大min(N,K)、そして捨てる個数がたかだかi+j個であり、この個数も最大でmin(N,K)個です。取り出した宝石のソートおよび捨てる操作もO(min(N,K)log \ min(N,K))でできるので、解説にもあるように、R = min(N,K)とすると、O(R^{3}logR)で最適解を調べることができます。

感想

計算量解析、考察ミスが怖くてじっくり時間をかけました。
ここら辺の証明等を高速に行いたいですね。




以上の内容はhttps://emtubasa.hateblo.jp/entry/2019/05/28/155509より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14