あなたの使命は、コンベヤーベルトから袋に果物を詰めて小売業者に送ることを最適化し、最大数の袋を最適化できるアルゴリズム(プログラムまたは機能)を構築することです。
各バッグには少なくとも一定量の重量が必要ですが、その重量を使用して別のバッグを満たすことができるため、超過分は利益を失います。袋詰め機は常にn
キューからの果物を先読みしn
ており、処理中の(単一の)袋にこれらの果物のいずれかを追加することのみを選択できます。n
キューの最初の要素を超えて見ることはできません。プログラムは、バッグの中にすでにある重量を常に正確に知っています。
これを視覚化するもう1つの方法はn
、新しい果物が到着する前に果物を採取する必要がある場所に、最終的なサイズの積載エリアを備えたコンベアベルトを用意することです。最後に残った果物と満杯でない袋は廃棄されます。
入力
- キュー内の果物の重量のリスト/配列(正の整数)
- バッグの最小総重量(正の整数)
- 先読み
n
(正の整数)
出力
アルゴリズムは、すべてのバッグについて、その中の果物の重さを返す必要があります。それは、あなたやあなたの言語にとって便利な手段であれば、その標準入力でも戻り値でもなんでもです。プログラムを実行して、コンピューターで1分でスコアを計算できるはずです。
例
Total weight 1000, lookahead of 3 and fruit queue:
[171,163,172,196,156,175,162,176,155,182,189,142,161,160,152,162,174,172,191,185]
One possible output (indented to show how the lookahead affects the bagging):
[171,163,172, 156,175, 176]
[162, 155,182,189, 161,160]
[152,162,174,172,191,185]
得点
アルゴリズムは、私が用意した10000個のオレンジのバッチで、両端を含む2〜7の先読みで6回実行してテストされます。少なくとも1000ユニットの袋に詰めてください。オレンジは通常、平均重量170、標準偏差13で分布しています。
スコアは、6回の実行からのバッグの数の合計になります。最高のスコアが勝ちます。標準の抜け穴は許可されていません。