全てのキーボードで全てのワードの打ち方を検証する、 解法では間に合いません。 そこで、 番目のワードを入力する際、 番目以前に使用したキーボードの情報は不要である事に注目します。すると、以下のような動的計画法が考えられます。
状態数は、各ワード毎に使用するキーボードが存在するため、 です。
各遷移について、 番目のワードを番目のキーボードで入力するコストを計算してから実施する事で、 番目に使用したキーボードを全探索する で計算する事ができます。
全体として で計算する事ができます。
C++での実装例は以下の通りです。
各遷移について、 番目に使用したキーボードを全探索する必要はなく、以下の 通りについて調べれば十分です。
このように計算する事で、各遷移を で求め、全体として に高速化する事が出来ます。
C++での実装例は以下の通りです。