問題

  • 重さwi,i=1,..,Nwi,i=1,..,Nのラクダが、橋を渡ろうとしている。
  • 橋はMM個の部材からなり、jj番目の部材は長さljljで耐加重がvjvjである
  • ラクダは1列に並んで橋を渡る。ラクダ間の距離は場所によって異なってよいが、一定に保たれる
  • ラクダの列のを最短にせよ

ポイント1

まずは、ラクダの順列を固定して考える。このとき、各1i<jN1i<jNに対して、wi+..+wjwi+..+wjより 耐加重が小さい部材の最大長をLi,jLi,jとすると、ラクダi,ji,j間の距離はLi,jLi,j以上である必要がある。 Li,jLi,jは、vjvjをソートしておけば、各i,ji,jに対してO(logM)O(logM)で計算可能。 Li,jLi,jの計算は、全体としてO(N2logM)O(N2logM)かかる。

ポイント2

頂点iiからjjに長さLi,jLi,jの有効辺を貼る。頂点11からNNへの最長路が求める最適値となる。 頂点11から頂点jjへの最長路の長さは、max{1i+ij}

これは、DPでO(N2)で計算可能。

これを、全順列について計算すれば良い。Nは最大8なので大丈夫。