arc 105 c
- 重さwi,i=1,..,Nwi,i=1,..,Nのラクダが、橋を渡ろうとしている。
- 橋はMM個の部材からなり、jj番目の部材は長さljljで耐加重がvjvjである
- ラクダは1列に並んで橋を渡る。ラクダ間の距離は場所によって異なってよいが、一定に保たれる
- ラクダの列のを最短にせよ
ポイント1
まずは、ラクダの順列を固定して考える。このとき、各1≤i<j≤N1≤i<j≤Nに対して、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{1→iの最長路+i→jの長さ}
これは、DPでO(N2)で計算可能。
これを、全順列について計算すれば良い。Nは最大8なので大丈夫。