ABC 013 C - 節制
実数xより大きい最小の整数は⌊x⌋+1(あるいは⌊x+1⌋)である。間違えて⌈x⌉としてしまったのが2回目なのでメモ。
普通の食事をi日、質素な食事をj日取るとすると、最終日の満腹度はH+Bi+Dj−E(N−i−j)であり、これが正でなければならない。逆に、前半に食事をし続けて後半に食事を抜けば初日か最終日に満腹度が最小になるので、最終日の満腹度が正になるような(i,j)については、常に満腹度が正になるような食べ方が存在することになる。したがって次の問題に帰着する。
Minimize Ai+Cjsubject toH+Bi+Dj−E(N−i−j)>0i≥0,j≥0,i+j≤N
iもjも小さければ小さいほどよいので、各i∈{0,...,N}について条件を満たすような最小のjだけ調べればよい。具体的にはj=max(0,⌊(EN−H−(B+E)i)/(D+E)⌋+1)としてAi+Cjの最小値を全探索する。(ただしi+j≤Nを満たしていないものは除く。)O(N)。