這道題看上去就像一個動態規劃!可是仍是要把矩陣壓成一行。數組
而後按 \(A\)數組 將結構體從小到大排個序。spa
隨後咱們開始了動規標準步驟:code
很顯然, \(f_i\) 表示遊覽完第\(~i~\)個景點是的最長時間。blog
Q(動規小白爲啥動規小白要作這題啊):怎麼看粗來的???io
A:動規不是一維不行加一維的嗎模板
有了這個狀態相信動規小白也能看粗來轉移方程吧!class
那麼咱們假設看完了第\(j\)個景點後就去了第\(i\)個景點(\(j~ \rightarrow ~i\))。im
那麼咱們的方程就顯而易見了。db
\[\begin{matrix}f_i = max\{ f_j + (| ~ x_i - x_j ~ | + | ~ y_i-y_j ~ |) \}+B_i\\ =max\{ f_j + dis(i, j)\}+B_i~~~~~~~~~~~~~~~~~~~~\end{matrix}\]img
能夠發現直接暴力這麼作的時間複雜度是\(O((nm)^2)\)
即便咱們的題目限時兩秒也會炸!!!
Q:怎麼辦呢???
若是\(j\)直接從\(1\)開始枚舉就會有冗餘的狀況:
假設你的\(A_i\)是\(4\)。
\(A_{1 \sim i-1}\)分別是\(\{ 1,1,1,1,1,2,2,2,3 \}\)。
你確定選\(3\)都要比選其餘的數要強(請讀者自行理解),因此從\(3\)的那裏開始
使用
register
是的又是很明顯地就能夠看出,這題能夠用最短路。
存鄰接表時就只存比第\(i\)個小的就好了,剩下的就是SPFA模板了
最後