題目比較好,人比較菜。。。
#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 其實就是乙個滑動視窗,考慮到轉移順序,就是寫四遍單調佇列 ...