このACM ICPCの問題について、助けが必要です。私の現在の考えは、これを最短経路問題としてモデル化することであり、これは問題ステートメントの下で説明されています。
問題
あるN = 1000
において1-Dの数直線に沿って位置する核廃棄物容器の別個の位置は-500,000 to 500,000
、を除いx=0
。人は、すべてのごみ箱を集める仕事をします。廃棄物容器が収集されない秒ごとに、1単位の放射線を放出します。人は1秒ごとにユニットx = 0
を移動でき1
、ごみの収集にかかる時間はごくわずかです。すべてのコンテナを収集している間に放出される放射線の最小量を見つけたい。
サンプル入力:
4
にあるコンテナ[-12, -2, 3, 7]
。
これらのコンテナを収集するのに最適な順序は[-2, 3, 7, -12]
、50
ユニットの最小排出量です。説明:人は-2
2秒後に行き、その時間の間2 units
に放射線が放出されます。その後、彼は3
(距離:)に移動し5
、バレルが2 + 5 = 7
放射単位を放出した。彼はその銃身がユニットを放出4
したx = 7
場所に到達するまでにさらに数秒かかります2 + 5 + 4 = 11
。彼はそのバレルがユニットを放出19
したx = -12
場所に到達するのに数秒かかります2 + 5 + 4 + 19 = 30
。2 + 7 + 11 + 30 = 50
、これが答えです。
ノート
明らかなO(N!)
解決策があります。ただし、最も近いものに移動する、または最も近いクラスターに移動するなどの貪欲な方法を検討しましたが、機能しませんでした。
私はこの問題についてかなり長い間考えてきましたが、それをグラフ検索問題としてモデル化しました。
0
ベースライン位置として挿入します(これが初期状態になります)- 次に、ポジションを最小から最大の順に並べ替えます。
- 私たちは、その後、BFS / PFS、やる
state
から構成を- 二つの整数
l
とr
我々はすでに訪問していることをソートされた位置の配列の連続した範囲を表します loc
範囲の左端か右端のどちらにいるかを示す整数time
経過時間を示す整数- これまでの総コストを示す整数の「コスト」(訪問したノードに基づいて)
- 二つの整数
- 各状態から[l-1、r]および[l、r + 1]に移動し、他の3つの整数を適宜調整します。
- 最終状態は[0、N]で、両方の終了位置をチェックします。
ただし、[L, R, loc]
状態を一意に定義するわけではないようで、これらをそれぞれL, R, loc, and time
最小化cost
しながらを格納する必要があります。これは指数アルゴリズムにつながりますが、それでもまだ良い方法には遅すぎます。
誰かが私のアイデアを広げたり、正しい方向に押し進めたりするのを手伝ってくれますか?
編集:これは、おそらく動的プログラミング最適化問題としてモデル化できますか?考えてみると、グラフ検索ソリューションと同じ問題があります-電流cost
が低いからといって、それがそのサブ問題の最適な答えであることを意味するわけではありませんtime
。
貪欲は機能しません:特定の場所に移動するコストを推定する貪欲な選択アルゴリズムがあります(たとえば、右に移動すると、左のバレルまでの距離が2倍になります)。
ヒューリスティックを使用して、優先度優先の検索を実行できますか?ヒューリスティックは、現在の旅行のコストと経過時間を組み合わせることができます。