【記憶體限制:$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])$$
狀轉都出來了,為什麼不上**?
#includeusingnamespace
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公里徒步旅行心情分享 一
兩三天的膚淺準備,第一 路線,第二 帳篷,第三 住宿,第四 安全 路線大致 上海淞虹路地鐵站 天山西路 聯友路 北青公路 機場路 聖祥中路 聖祥西路 陽光東路 陽光中路 金雞湖大道 東環路 日規路 莫邪路 東匯路 西匯路 終點站 汽車北站或火車站蘇州站 大概如圖 線路確定了後然後我們各自就買了一些日...