AtCoder Beginner Contest 271 D問題 Flip and Adjust
問題
提出解答
問題の概要
枚のカードがある. 番目のカードの表には整数 , 裏には が書かれている.
各カードは表か裏のうちのどちらか一方を上にして置くことができる.
上に向けられた面に書かれている 個の整数の総和をちょうど にすることは可能か? 可能ならば各カードの表裏の一例を挙げよ.
制約
解法
次のような動的計画法で解くことにする. に対して, を
- 枚のカード までのカードの表裏を決めた場合において, 総和を にすることが可能ならば , 不可能ならば .
ベースケースは の場合で,
である.
更新式については 枚目を表にするか裏にするかで場合分けすることによって,
となることもわかる. なお, については とする.
これにより, 総和を にすることが可能であることの必要十分条件は である.
また, 表裏の一例を挙げる場合についても, について, 以下は同値である.
- カード の表裏を決めた時, カード が表で総和が になる 枚の表裏が存在する.
- かつ
カード が裏で総和が になる 枚の表裏が存在する場合も同様である. これを利用することによってカード の順に表裏を決定できる.
よって, 動的計画法により計算量 時間で求めることができた.