やることは次の2つのステップにわかれている:
- 取引所Aでどんぐりを金属に交換し、取引所Bで金属をどんぐりに交換する
- 取引所Bでどんぐりを金属に交換し、取引所Aで金属をどんぐりに交換する
それぞれのステップでどんぐりを最大化すればよい。
また、なら金を交換するのはステップ1のみでよいし、ならステップ2のみでよい。銀、銅についても同様である。つまり、交換レートの大小関係に応じて、次の3つの場合を考えればよい。
, , の場合
ステップ1で金銀銅を交換し、ステップ2では何もしないのが最適である。
Aで金をグラム、銀をグラム買うとすると、銅は最大で買えるので、最終的などんぐりの数が決まる。という条件下で最大値を全探索すればよい。。
, , の場合
ステップ1で金銀を交換し、ステップ2で銅を交換するのが最適である、
ステップ1で金をグラム買うとすると、銀は最大でグラム買えるので、ステップ1終了後のどんぐりの数が決まる。という条件下で最大値を全探索すればよい。
ステップ1終了後のどんぐりの数の最大値をとする。ステップ2ではできるだけ多くの銅を交換するのがよいため、最終的な最大値はである。(ただし、はあまりを求める演算子とする。)計算量は。
, , の場合
ステップ1で金を交換し、ステップ2で銀銅を交換するのが最適である、
ステップ1ではできるだけ多くの金を交換するのがよく、どんぐりの数の最大値はである。
ステップ2で銀をグラム買うとすると、銅は最大でグラム買えるので、最終的などんぐりの数が決まる。という条件下で最大値を全探索すればよい。計算量は。□
ほかのパターンは適当に定数を入れ替えれば上のどれかに帰着する。とすると、全体の計算量はである。
この方針は金属が3種類しかないことに依存していて、4種類だと早くも破綻してしまう。1
3種類なら場合分けが通用するだろうというあたりから考察を始めるので、想定解のDPは一瞬も考えなかった。それはそれでいいとしても、たとえば種類だったらDPを書けただろうか? さすがに書けると思いたいけど、あまり自信はない。
深く考えてないけど、2-2, 3-1の買い方は上と同じ方針で良さそう。0-4, 4-0の買い方は半分全列挙で何とかなる? でも、1-3が間に合わない気がする。 ↩︎