AOJ 2642 Dinner
Dinner | Aizu Online Judge
AOJ-ICPC 550点…?
問題概要
日間の夕食を食堂か自炊のどちらかで済ませる。
日目に食堂で夕食をとると幸福度が 得られる。
各日に自炊をすると得られる幸福度は、 (自炊をした時点での自炊パワー) である。
自炊パワーは、初期値が であり、食堂に行くたびに 1 減り、自炊をするたびに 1 増える(食事の終了時に変動する)。
日間の幸福度の総和の最大値を求めよ。
制約
解法
気づくべき重要な点は、ある日に自炊によって得られる幸福度は、「その日以前に何日自炊し、何日食堂に行ったか」のみに依存するということである。
自炊を 日行い、食堂に 日行ったとき、 日目に自炊をすると幸福度は 得られる。
ここで、 日間で 日自炊したときの幸福度を式にしてみる。
とし、
自炊した日を 日目, 日目, … , 日目(0-indexed)とする。
日目以前に自炊した日数が 日で食堂に行った日数が 日なので、 日目の自炊パワーは、 となる。
よって、 日目に自炊したときの幸福度は であり、 日の自炊で得られる幸福度は である。
一方、食堂で得られる幸福度の総和は である。
以上から、自炊した日を 日目, 日目, … , 日目としたときの幸福度の総和は
となる。
これを変形すると、
となり、これを最大化したいので、 は が小さいものから 個選んでくるのが最適となる。
よって、 を全探索してあげると良い。