瑰麗華爾茲

2021-07-22 10:50:39 字數 3709 閱讀 7390

你跳過華爾茲嗎?當**響起,當你隨著旋律滑動舞步,是不是有一種漫步仙境的愜意?

眾所周知,跳華爾茲時,最重要的是有好的**。但是很少有幾個人知道,世界上最偉大的鋼琴家一生都漂泊在大海上,他的名字叫丹尼·布德曼·t.d.·檸檬·1900,朋友們都叫他1900。

1900出生於20世紀的第一年出生在往返於歐美的郵輪維吉尼亞號上,然後就被拋棄了。1900剛出生就成了孤兒,孤獨的成長在維吉尼亞號上,從未離開過這個搖晃的世界;也許是對他命運的補償,上帝派可愛的小天使艾公尺麗照顧他。

可能是天使的點化,1900擁有不可思議的鋼琴天賦,從未有人教,從沒看過樂譜,但他卻能憑著自己的感覺彈出最沁人心脾的旋律。當1900的**獲得郵輪上所有人的歡迎時,他才8歲,而此時他已經乘著海輪往返歐美50多次了。

雖說是鋼琴奇才,但1900還是個8歲的孩子,他有著和一般男孩一樣的好奇的調皮,不過可能更有一層浪漫的色彩罷了:

這是乙個風雨交加的夜晚,海風捲起層層巨浪拍打著維吉尼亞號,郵輪隨著巨浪劇烈的搖擺。船上的新薩克斯手邁克斯·托尼暈船了,1900將他邀請到舞廳,然後——,然後鬆開了固定鋼琴的閘,於是,鋼琴隨著海輪的傾斜滑動起來。準確的說,我們的主角1900、鋼琴、郵輪隨著1900的旋律一起跳起了華爾茲,所有的事物好像都化為一體,隨著「強弱弱」的節奏,托尼的暈船症也奇蹟般地一點一點恢復。正如托尼在回憶錄上這樣寫道:

大海搖晃著我們

使我們轉來轉去

快速的掠過燈和家具

我意識到我們正在和大海一起跳舞

真是完美而瘋狂的舞者

晚上在金色的地板上快樂的跳著華爾茲是不是很愜意呢?也許,我們忘記了乙個人,那就是艾公尺麗,她可沒閒著:她必須在適當的時候施魔法幫助1900,不讓鋼琴碰上舞廳裡的家具。而艾公尺麗還小,她無法施展魔法改變鋼琴的運動方向或速度,而只能讓鋼琴停一下。

不妨認為舞廳是乙個

n n

行m m

列的矩陣,矩陣中的某些方格上堆放了一些家具,其他的則是空地。鋼琴可以在空地上滑動,但不能撞上家具或滑出舞廳,否則會損壞鋼琴和家具,引來難纏的船長。

每個時刻,鋼琴都會隨著船體傾斜的方向向相鄰的方格滑動一格,其中相鄰的方格可以是向東、向西、向南或向北的。而艾公尺麗可以選擇施魔法或不施魔法,如果不施魔法,則鋼琴會滑動,而如果施魔法,則鋼琴會原地不動。

艾公尺麗是個天使,她知道每段時間的船體的傾斜情況。她想使鋼琴盡量長時間在舞廳裡滑行,這樣1900會非常高興,同時也有利於**托尼的暈船。但艾公尺麗還太小,不會算,所以希望你能幫助她。

輸入檔案的第一行包含

5 5

個數n,

m,x,

y n,m

,x,y

和k k

。n n

和m m

描述舞廳的大小,

x x

和y y

為在第1 1

時刻初鋼琴的位置(

x x

行y y

列);我們對船體傾斜情況是按時間的區間來描述的,比如「在[1

,3] [1,

3]

時間裡向東傾斜,[4

,5] [4,

5]

時間裡向北傾斜」,因此這裡的k表示區間的數目。 以下n

n

行,每行

m m

個字元,描述舞廳裡的家具。第

i i

行第j j

列的字元若為『 . 』,則表示該位置是空地;若為『

x x

』,則表示有家具。 以下 

k ' role="presentation" style="position: relative;">kk

行,順序描述

k k

個時間區間,格式為:si

tidi

(1≤i

≤k) sit

idi(

1≤i≤

k)

。表示在時間區間[s

i,ti

] [si

,ti]

內,船體都是向di

d

i方向傾斜的。di

d

i為1,

2,3,

4 1,2

,3,4

中的乙個,依次表示北、南、西、東(分別對應矩陣中的上、下、左、右)。輸入保證區間是連續的,即 s1

=1s 1=

1ti=

si−1

+1(1

k)t i=

si−1

+1(1

k)

tk=t tk=

t輸出檔案僅有

1 1

行,包含乙個整數,表示鋼琴滑行的最長距離(即格仔數)。

4 5 4 1 3

..xx.

…x.1 3 4

4 5 1

6 7 2

鋼琴在「×」位置上時天使使用一次魔法,因此滑動總長度為6。50%

' role="presentation" style="position: relative;">50%50

%的資料中,1

≤n,m

≤200,t

≤200

, 1≤

n,m≤

200,t≤

200;

100%

100%

的資料中,1

≤n,m

≤200,k

≤200,t

≤40000

, 1≤

n,m≤

200,k≤

200,t≤

40000

。演算法:單調佇列維護:o(

n∗m∗

k)o (n

∗m∗k

)設 f

[k,i

,j] f[k

,i,j

]為第

k k

段時間到達第 i,

j' role="presentation" style="position: relative;">i,j

i,j點的最優解。現有4

4

種傾斜方式,方法同理,先舉乙個「上」的例子

對於每個 f[

k,i,

j]f [k

,i,j

]它的值是取決於f[

k−1,

i+u,

j],(

0≤u≤

tk−s

k+1 f[k

−1,i

+u,j

],(0

≤u≤t

k−sk

+1

,且中間不能有障礙物),所以在轉移時可以維護這一列的單調佇列。

每執行完一行後,就讓時間引數 ti

me+1

t im

e+

1,而我們要維護的就是 ma

x(f[

k−1,

i+u,

j]−t

ime)

m ax

(f[k

−1,i

+u,j

]−ti

me

);at

tent

ion:

a tt

enti

on

:①若取隊頭為最優解,則還要考慮隊尾是否要刪除的必要,即當

u>tk

−sk u

>tk

−s

k時就要刪掉隊尾。

②遇到「x」時,把佇列歸零。

瑰麗華爾茲 單調佇列

我csdn的部落格 我洛谷的部落格 說明啊,它可以用單調佇列 易推出dp x y t max dp x y t 1 1,dp x y t 然後看一下資料範圍?n,m 200,k 200,t 40000 o n 3 顯然,tle 然後老師講了優化方案 t可以換成k 因為任一區間時間內,都只向乙個方向走...

DP 單調佇列 瑰麗華爾茲

題意 給定乙個n行m列的矩陣,矩陣的某些方格上有障礙物。乙個人從給定起點開始滑行,每次滑行都有乙個滑行方向,你可以在0 ci之中選擇這次滑行長度。滑行過程中不能碰到障礙物。求最長的滑行距離。n,m,滑行次數k 200。ci之和 40000。思路 參考這篇文章 然而不會實現 膜hzwer的 inclu...

NOI2005 瑰麗華爾茲

嘟嘟嘟 這題大家應該都做過,就是暴力dp 單調佇列優化。dp方程其實很好想,最初是這樣的 dp t i j 表示時刻 t 後,走到 i,j 格仔的最遠路程,於是就有 dp t i j max 1 但這是 o tn 2 的,不僅會tle,還能mle。接著看題,發現給得 k 沒用上。想一下發現 k 的特...