0708hgoi

由於前兩題都很簡單,就簡單寫下思路。
1.一個人往下走與一個人往上走碰到之後改變方向,就相當於兩人繼續往前走。於是我們就可以將箱子平均分配給每個人。多餘的箱子分給完成任務最早的人。這樣就可以輕鬆求得答案了。
2.o(nlogn)的算法就是將圓拉成一條直線,並將它倍長。從1到n點往後n個點中進行二分,由此可以得出答案。
o(n)的算法就是從起點開始,有兩個標記,一個左標記,一個右標記。在總值小於周長的一半時右標記加加,反之左標記加加。這樣做也要將圓拉成直線並倍長。

這道題是好題

第三題是省選題,比較難想
3.首先我們看到題目會發現數據很小,但用深搜又不行,於是就可以想到應該用dp。(本蒟蒻想不出來,是某徐大班長想出來的)然而怎麼dp呢?如果一幅圖中有一條到達終點的最短路而另一幅圖中有不一樣的一條最短路(兩個障礙不同)。我們將這兩幅圖合併,障礙全部疊加在第三幅圖中得出最終最短路。最終最短路同樣可以在第一幅和第二幅圖中走。這樣我們就可以用區間dp,以天數長度爲區間,就可以完美dp。我們提前處理好兩兩時間之內所有的疊加障礙最短路。在在之後用區間dp。
這裏預處理我用的是floyd因爲好打,而dp用的是二維的。
dp[i][j]表示從i到j時間中從起點到終點最短路之和。
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+kk)(kk是換路代價)
這裏dp[i][j]要提前處理好dp(賦好初值)
優秀算法還有spfa來求最短路
一維數組dp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章