AtCoder Beginner Contest 237 F問題 |LIS|=3
問題
提出解答
問題の概要
以下を全て満たす整数列の個数を求めよ.
- 長さ
- 各項は 以上 以下
- 最長増加部分列の長さがちょうど
ただし, 最長増加部分列は狭義単調増加な部分列に対して適用される.
制約
解法
LIS を求める方法はいくつかあるが, ここでは二分探索を用いる方法を考える.
動的計画法で求める. を第 項まで確定させたとき, LIS を求めるための配列 (二分探索の対象) が であるような列の数とする.
ベースケースは
である.
更新式について, 第 項までみて, 二分探索の対象が であるとき, 第 項目が である場合を考える. 今回は狭義単調増加列であることに注意すると,
- ならば, に を加算する.
- ならば, に を加算する.
- ならば, に を加算する.
- ならば, LIS の長さが 以上で確定するので, 加算はない.
この更新式によって, 動的計画法の要素の数が で各 ごとに更新のために 時間かかるので, 全体では となる, この問題の制約下では, 十分高速である.