コードはあえて記載しません、少し勉強すれば作れるはずなので想像してみてください。
仕分ける対象が10個かつ大小のりんごの重量だったらで考えていきましょう。
まずは10個のりんごの重量を量ります。
次に10個のりんごの平均重量を出します。
ここまでは誰が考えても一瞬でたどり着けるでしょう。
ここからがエンジニアとしての腕の見せどころです。
一番確実なパターンは、無造作に10個の中から5個を取り出す事を全パターンで行い、
平均重量と完全に一致すればそこで計算終了です、
一致しなければ全パターン行った結果、最も平均重量に近いパターンを覚えておき提出すれば良いのです。
「組み合わせパターン PHP」等でググればおk
今回はたかが50個中25個なんで全パターンゴリ押しでも大した時間がかかりませんが、
見ないでも良い分は見ないことにしましょう。
分かりやすいように10個からの調査を継続します。
まずはりんご10個重量が小さい順に並べ替えます(PHP ソート等でぐぐってください)
◆:選択 ◇:選択しない
←小 大→
◆◆◆◆◆◇◇◇◇◇
◆◆◆◆◇◆◇◇◇◇
◆◆◆◆◇◇◆◇◇◇
◆◆◆◆◇◇◇◆◇◇
◆◆◆◆◇◇◇◇◆◇
◆◆◆◆◇◇◇◇◇◆
◆◆◆◇◆◇◇◇◇◆
◆◆◆◇◇◆◇◇◇◆
~~~~中略~~~~
◆◇◇◇◇◇◆◆◆◆
これらの選択の仕方ならば下のパターンの方が合計重量が重い事が保証される…
つまりソート済みであることが保証されます。
ならば二分探索で高速に評価出来るので利用しましょう。
10個の内、最も左のものを選択したパターンは21通りですので、最高5回程度の評価で最もプラマイ0に近い値が得られます。
次のパターン(17通り)
◇◆◆◆◆◆◇◇◇◇
◇◆◆◆◆◇◆◇◇◇
◇◆◆◆◆◇◇◆◇◇
~~~~中略~~~~
◇◆◇◇◇◇◆◆◆◆
先ほどのような調子で評価していきましょう。
後はこれの繰り返しなんで、50個中25個を調べるアルゴリズムも同じ組み方すれば
100回程度の評価で回答が出るんじゃないですかね?
5000個中2500個あたりになってくると総当りが不可能になってくるので、この手法を使う事をオススメします。