ダイナミックプログラミングのみで解決できると主張された1つの問題を解決しようとしました。次は問題です。 人は全エネルギーをHとし、距離Dをカバーする必要があります。最小距離で最大エネルギーHを使ってこの距離をカバーしたいと考えています。彼は5つのモードで走ることができます。合計距離は、5つのモードの1つに従って各kmを実行することによってカバーされます。 '500万10秒'、6 'のM 11sec'、 '7メートル7sec'、8 'のM 11sec'、9 'のM 11sec'次のケースで欲張りアルゴリズムが失敗する理由
- : これらの5つのモードは時間ソートされた2つのアレイを使用して記載されています
エネルギーが必要:-11,9,8,7,6
をだから私の貪欲なソリューション戦略は
- 計算最低を取るモードを使用してH/D
ラン次キロメートルのX =階です時間とエネルギーが必要です< = X
&セットH =残距離までモード
集合D = D-1
Gotoステップ1で必要とされるH-エネルギーが0
- 回答全ての一部であろうとなり各kmの時間。
この解決策はうまくいくと思いますが、実際には失敗します。私はDPを使ってそれを解決する方法を知っていますが、どこで失敗するのか知りたいのです。私は多くの例を試しましたが、感情を得ていません。私は2つの配列の要素の上に正確には想起しませんが、それらは必ずソートされた順序であります。
なぜこれが機能すると思いますか?あなたのアルゴリズムがうまくいくはずであることを証明しようとすると、ロジックのどこかにギャップがあるでしょう。 – user2357112
さて、アルゴリズムのために、今度はループが必要です - 答えは(時間:どこでmax(E):E <= x))ですか?D.各ステップで、それぞれのエネルギーを固定しているので同じモードを選択しますkm。次のようにしてください: 選択モードの後にDL - 距離を残してください。 HL - モードを選択した後に残るエネルギー。各ステップで、「モードの時間モード - > minと(すべてのモードでの最小モードエネルギー)* DL> = HL」を選択します。 H = 12、D = 2、最初のステップがH = 11のような場合には、解を伴わないようにするためには、「DL> = HL」が必要です。 –
まだデバッガを試しましたか? – MrSmith42