問題はこちら
問題概要
店舗から日間店舗選んで商品を(日店舗のみから必ず)買う). 商品の値段はの倍数で与えられ, 毎日各店舗で値段が変わる. 日連続で同じ店で買うと割引, 日連続同じ店で買うと割引になる. このとき, 日間で買う商品の値段の最小値を求めよ.
思考の流れ
以下,日目の番目の店の値段をとする.
どの店で何日連続で買ってるか, という情報をもつDPを行えばよさそう. を「日目に番目の店で日連続で買ってる時の最小(3日以上買うときは)」とすると更新式は
(かつでをみたすの最小値)
普通にやったら間に合わないが「左右からの累積演算による高速化」やSegmentTreeを用いるとを高速に計算できる.
提出プログラム
https://atcoder.jp/contests/joisc2008/submissions/12008874
感想
すぐに解法が浮かんだのでよかった.