他に残っている料理で最も安いものを選び、それを1皿出す。1つも料理が残っていないとき。客は出した料理の分だけお金を払うが、怒って帰る場合は何も支払わない。客が怒って帰る場合でも、出せるだけ料理は出さねばならない。このときそれぞれ客について、その客が払う金額を求めよ。普通にシミュレーションをしようとすると、最も安い料理を求める部分がボトルネックとなる。作り、どの料理まで使い切ったかを記録しておく。することで毎回全部探索しなくてもよくなり、十分高速に解ける。ちなみにTutorial解法はpriority_queueに料理を安い順に突っ込んでいる。そっちの方が実装が楽そうな気がする。比較関数でconst参照渡ししてないけど、コピーは大したコストでもないのでまぁ。これをそれぞれ大きさ2以上のいくつかの集合に分割する。個の集合に分割したとする。このスコアの最小値を求めよ。解説まず、各集合の大きさはできるだけ小さい方がよい。これはなぜかというと、の第2項が最小になるからだ。偶数であることに注意)。やってペアを組んでいけばいいだろうか?これは、一番小さいものと大きいもの同士を順に組んでいくのがよい。スコアが最小になるからだ。辺の無向連結グラフがある。