多校聯考 初級 徒步旅行

2021-09-29 06:29:12 字數 2834 閱讀 6264

【記憶體限制:$512 mib$】  【

時間限制:$2000 ms$】

【標準輸入輸出】  【

題目型別:傳統】  【

評測方式:文字比較】

小$a$決定開始一場奇妙的徒步旅行,旅行地圖可以看成是乙個平面直角座標系,小$a$從家$o(0,0)$出發,每一步移動只能由他此時所在的位置$(x,y)$走到以下四個座標之一:$(x-1,y),(x,y-1),(x+1,y),(x,y+1)$。現在有$n$個旅遊景點,第$i$個旅遊景點位置為$(x_i,y_i)$。 由於世界如此之大,整個旅行地圖被分成了多個不同的氣候區,某個景點$(x_i,y_i)$的氣候區$c_i=max(x_i,y_i)$。小$a$想要更好的了解這個世界使得他這次徒步旅行更有意義,所以他想要去氣候區$i+1$旅行當且僅當訪問完氣候區$i$的所有旅遊景點。當他訪問完所有的景點時,他會回到家裡。 小$a$想讓你幫他設計出一條旅遊路線使得他移動的步數最少,因為徒步旅行還是比較累的……

第一行輸入乙個整數$n$,表示旅遊景點數量。

接下來$n$行,每行乙個整數對$(x_i,y_i)$代表第$i$個景區的位置。

僅一行,表示小$a$完成旅行所需移動的最少步數。

對於所有測試資料:

這道題看到有四個方向,又是在乙個網格中走路,首先我想到的就是搜尋......

看了看資料範圍,然後居然又想到剪枝或者是乙個記憶化......

然後,$dp$思路就出來了

剛開始的$dp$思路:

定義狀態$dp_$:已經訪問了第$i$個氣候區的其中$j$個

這個狀態轉移似乎很好想,但是感覺有些彆扭

比如說你的上一層狀態是從哪乙個點轉移過來的,這還是要列舉

然後就是你已經訪問當前氣候區的哪些點了,這個也是不知道的

所以說,這個狀態定義得是有問題的

想了一會兒,發現了乙個關鍵的點:

每乙個氣候區在網格中都是乙個拐角的形狀,就像這樣

當然這不是我說的關鍵的點

而每次訪問完乙個氣候區,總是在這個拐角的最左邊或者是最下邊

那麼我們就可以再新定義乙個狀態$dp[i][0|1]$:在訪問完第i個氣候區之後,是在最左邊$(j==0)$還是最下邊$(j==1)$

將輸入的資料按照氣候區從小到大排序(當然還有很多細節,這個交給你自己想或者是$py$一下**

然後處理出乙個$l$陣列與乙個$r$陣列,其中

$l[i]$:第i個氣候區最左邊的點的下標

$r[i]$:第i個氣候區最右邊的點的下標

那麼狀轉為$$dp[i][0]=min(dp[i-1][0]+dis(l[i-1],r[i]),dp[i-1][1]+dis(r[i-1],r[i]))+dis(r[i],l[i])$$

$$dp[i][1]=min(dp[i-1][0]+dis(l[i-1],l[i]),dp[i-1][1]+dis(r[i-1],l[i]))+dis(l[i],r[i])$$

狀轉都出來了,為什麼不上**?

#includeusing

namespace

std;

#define int long long

#define cg (c=getchar())inline

intqread()

#undef cgtemplate

inline t max(const t x,const t y)

template

inline t min(const t x,const t y)

template

inline t fab(const t x)

const

int maxn=3e5;

struct

node

node(

const

int x,const

inty):x(x),y(y),c(max(x,y)){}

node(

const

int x,const

int y,const

intc):x(x),y(y),c(c){}

bool

operator

}dat[maxn+5

];inline

int dis(const

int i,const

int j)

inthasind;

int dp[maxn+5][2

];int l[maxn+5],r[maxn+5

];signed main()

sort(dat+1,dat+n+1

); l[hasind]=0

;

for(int i=1,pre=0;i<=n;++i)

dat[i].c=hasind;

}r[hasind]=n;

for(int i=1;i<=hasind;++i)

printf(

"%lld\n

",min(dp[hasind][0]+dis(l[hasind],0),dp[hasind][1]+dis(r[hasind],0

)));

return0;

}

11 7多校聯考

t1 為了避免晚上種種事情導致寫不成題解就先把t1寫了,畢竟也是很值得寫的。我這道題憑著乙個半感性半理性的想法意外的水到了80分 真的是很考人品啊 學競賽啊,墜重要的就是人品!先看正解 我們可以這樣化 t s bk1 i1 a b k2 i 2 a bk3 i3 a b k4 再化簡一下 t s b...

9 7多校聯考

題目描述 給定了乙個正整數 n。有多少種方法將 n 分解成為四個質數 a,b,c,d 的和。例如 9 2 2 2 3 2 2 3 2 2 3 2 2 3 2 2 2,故共有 4 種方法將 9 分 解成為四個整數。輸入格式 本題多組資料測試 第一行讀入乙個整數 t 表示資料組數。接下來共 t 行,每行...

上海 蘇州 100公里徒步旅行心情分享 一

兩三天的膚淺準備,第一 路線,第二 帳篷,第三 住宿,第四 安全 路線大致 上海淞虹路地鐵站 天山西路 聯友路 北青公路 機場路 聖祥中路 聖祥西路 陽光東路 陽光中路 金雞湖大道 東環路 日規路 莫邪路 東匯路 西匯路 終點站 汽車北站或火車站蘇州站 大概如圖 線路確定了後然後我們各自就買了一些日...