この問題は、単純に O(n 3 ) 時間で簡単に解決できます。問題は次のようなものです。
数直線上には N 個の固有点があります。一定の間隔で数直線上のすべての点をカバーしたいとします。間隔はどこにでも配置できます。間隔を作成するにはコストがかかり
B + MXます。ここで、 は間隔をB作成する初期コストであり、Xは間隔の長さの半分Mであり、 は間隔の長さあたりのコストです。すべての間隔をカバーするための最小コストを見つけたいとします。
サンプルデータ:
Points = {0, 7, 100}
B = 20
M = 5
20 + 3.5×5 のコストで間隔 [0,7] を構築し、コスト 100 + 0×5 で [100,100] の間隔を構築できるため、最適解は 57.50 になります。合計すると 57.50 になります。
私は O(n 3 ) ソリューションを持っています。ここで、DP は からのポイントをカバーするための最小コスト[left, right]です。したがって、答えは になりますDP[1][N]。すべてのペアについて、(i,j)反復しk = {i...j-1}て計算するだけDP[i][k] + DP[k + 1][j]です。
ただし、このソリューションは O(n 3 ) (行列乗算のようなものだと思います) であるため、N > 2000 では遅すぎます。これを最適化する方法はありますか?