2019年4月5日金曜日

ABC 013 C - 節制

ABC 013 C - 節制

実数xxより大きい最小の整数はx+1\lfloor x \rfloor +1(あるいはx+1\lfloor x + 1 \rfloor)である。間違えてx\lceil x \rceilとしてしまったのが2回目なのでメモ。

普通の食事をii日、質素な食事をjj日取るとすると、最終日の満腹度はH+Bi+DjE(Nij)H + Bi + Dj - E(N-i-j)であり、これが正でなければならない。逆に、前半に食事をし続けて後半に食事を抜けば初日か最終日に満腹度が最小になるので、最終日の満腹度が正になるような(i,j)(i, j)については、常に満腹度が正になるような食べ方が存在することになる。したがって次の問題に帰着する。

Minimize Ai+Cjsubject toH+Bi+DjE(Nij)>0i0,j0,i+jN \begin{gathered} \text{Minimize} \ Ai + Cj \\ \text{subject to} \qquad H + Bi + Dj - E(N-i-j) > 0 \\ i \ge 0, j \ge 0, i+j \le N \end{gathered}

iijjも小さければ小さいほどよいので、各i{0,...,N}i \in \{0, ..., N\}について条件を満たすような最小のjjだけ調べればよい。具体的にはj=max(0,(ENH(B+E)i)/(D+E)+1)j = \max (0, \lfloor (EN-H-(B+E)i)/(D+E) \rfloor + 1)としてAi+CjAi+Cjの最小値を全探索する。(ただしi+jNi+j \le Nを満たしていないものは除く。)O(N){\mathcal O}(N)