luoguP2254 NOI2005 瑰麗華爾茲

2021-10-07 12:02:58 字數 2898 閱讀 6542

題目比較好,人比較菜。。。

#include

#define maxn 205

using

namespace std;

int n,m,x,y,k,f[maxn]

[maxn]

[maxn]

,l,r,d,dx[7]

=, dy[7]

=,l,r,q[maxn]

,ans =0;

char tu[maxn]

[maxn]

;int

main()

}memset

(f ,

-0x3f

,sizeof

(f))

; f[0]

[x][y]=0

;for

(int cishu =

1; cishu <= k ; cishu++

) f[cishu]

[i][j]

= f[cishu -1]

[i][j]

;while

(l <= r && q[l]

- i >

(r - l +1)

)l++

;while

(l <= r && f[cishu -1]

[q[r]

][j]

+ q[r]

< f[cishu -1]

[i][j]

+ i)r--

; q[

++r]

= i;

if(l <= r)f[cishu]

[i][j]

=max

(f[cishu]

[i][j]

, f[cishu -1]

[q[l]

][j]

+ q[l]

- i)

; ans =

max(ans , f[cishu]

[i][j]);

}}}else

if(d ==2)

f[cishu]

[i][j]

= f[cishu -1]

[i][j]

;while

(l <= r && i - q[l]

>

(r - l +1)

)l++

;while

(l <= r && f[cishu -1]

[q[r]

][j]

- q[r]

< f[cishu -1]

[i][j]

- i)r--

; q[

++r]

= i;

if(l <= r)f[cishu]

[i][j]

=max

(f[cishu]

[i][j]

, f[cishu -1]

[q[l]

][j]

+ i - q[l]);

ans =

max(ans , f[cishu]

[i][j]);

}}}else

if(d ==3)

while

(l <= r && q[l]

- j >

(r - l +1)

)l++

;while

(l <= r && f[cishu -1]

[i][q[r]

]+ q[r]

< f[cishu -1]

[i][j]

+ j)r--

; q[

++r]

= j;

if(l <= r)f[cishu]

[i][j]

=max

(f[cishu]

[i][j]

, f[cishu -1]

[i][q[l]

]+ q[l]

- j)

; ans =

max(ans , f[cishu]

[i][j]);

}}}else

if(d ==4)

while

(l <= r && j - q[l]

>

(r - l +1)

)l++

;while

(l <= r && f[cishu -1]

[i][q[r]

]- q[r]

< f[cishu -1]

[i][j]

- j)r--

; q[

++r]

= j;

if(l <= r)f[cishu]

[i][j]

=max

(f[cishu]

[i][j]

, f[cishu -1]

[i][q[l]

]+ j - q[l]);

ans =

max(ans , f[cishu]

[i][j]);

}}}}

cout<}

一開始看到平面圖上dp,直接慌了。。。

但其實50分的dp方程非常好寫

在加點優化,就可以有60分的好成績

然後直接上單調佇列了

這個部分

f[cishu -1]

[i][q[r]

]- q[r]

< f[cishu -1]

[i][j]

- j

不要像我一樣寫成

f[cishu -1]

[i][q[r]

]- q[r]

< f[cishu -1]

[i][j]

。。。。

不然就會自閉

P2254 NOI2005 瑰麗華爾茲

單調佇列優化線性dp 單調佇列中只需儲存下標 只能優化最內層迴圈 dp c 1 x y dp c 1 x que tl dis x,y,x,que tl 時才將隊尾元素出隊 而不僅僅是dp c 1 x y dp c 1 x que tl 即 用隊中所存下標對應狀態對當前狀態的貢獻為依據選擇是否留在隊...

P2254 NOI2005 瑰麗華爾茲

單調佇列優化dp 思路感覺比較簡單,但也許是最近降智嚴重,實現的時候還自閉了一會 kk n,m le 200,k le 200,t le 40000 發現區間個數比較小,可以考慮從 k 開始入手,也就是挨個考慮每個時間區間的情況來轉移 因為每個區間內傾斜方向相同,也就是這段時間內只能往乙個方向走或不...

Luogu 2254 NOI2005 瑰麗華爾茲

簡單dp,設 f 表示第i個時間段,鋼琴處在 j,k 位置移動距離的最大值,那麼有轉移 f max f f max f 其中 j dx len leq a leq j 1 k dy len leq b leq k 1 len ed st 1 其實就是乙個滑動視窗,考慮到轉移順序,就是寫四遍單調佇列 ...