CodeForces - 677D
一个N*M的网格图,每个格子有一把钥匙,上面一个权值
要求从 1到 P按顺序收集钥匙,保证 P只有一把
问收集全部钥匙的最短距离是多少
首先 dp[x][y] 表示收集 (x,y) 的最小距离
然后这题不能暴力,复杂度是 O(N4)
官方题解的 bfs复杂度没看懂,所以退而求其次,
实现了一下comment的二维树状数组
树状数组维护二维静态前缀最小值,感觉很tricky
其实就是利用了树状数组的结构,然后树状数组只能维护前缀,
这题正好只需要知道前缀最小就行了
对于一个点 (x0,y0) ,我们需要直到它左上区域,右上区域,左下区域,右下区域对他的最优值
左上: dp[x][y]+