これが私が見つけた非常に興味深いJavaの問題です:
本の印刷が見つかる前に、本は「作家」と呼ばれる特定の人々によってコピーされました。簿記係はコピーする必要があるN冊の本のスタックを持っています。その目的のために彼はK人の作家を持っています。各本は異なるページ数を持つことができ、すべての作家はスタックの一番上からのみ本をとることができます(彼が本1をとる場合、彼は本2をとることができますが、本4または本5をとることはできません)。簿記係は各本のページ数を知っているので、作家がコピーしなければならない最大ページ数を可能な限り少なくするために、作家間で本を共有する必要があります。もちろん、ページを分割することはできません。 30ページの本を15と15に分割することはできません。
たとえば、3人の作家がいる7冊の本があり、それに応じて本のページがある場合:30 50 5 60 90 5 80最適な解決策は、最初の作家が最初の4冊、2番目の作家が次の本、3番目が最後の2冊の本なので、次のようになります。
1番目=145ページ
2番目=90ページ
3番目=85ページ
したがって、プログラムは、ライター間でページを共有するための最適なソリューションを見つけるアルゴリズムを作成することです。したがって、プログラムの最後に、それぞれが何ページを取得したかを示す必要があります。
これは何年も前のプログラミングコンテストでした。試してみたかったのですが、これまでに見つけたのは、すべての本の総ページ数を、取得したライターの数で割ると、例106.66ページの場合、スタックからその数に最も近い連続した本を各ライターに渡そうとしますが、特に本のページ数が合計を超える場合は、ページ数が多い場合はまったく機能しません。ページ数をライター数で割った値
ですから、あなたの意見を共有し、数学的なものなど、必要に応じてヒントやヒントを提供してください。これは非常に興味深いアルゴリズムです。