Luogu 2254 NOI2005 瑰麗華爾茲

2022-06-13 04:45:15 字數 1121 閱讀 6854

簡單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 $

其實就是乙個滑動視窗,考慮到轉移順序,就是寫四遍單調佇列~

但是我成功地把方程寫錯了…… i - 1 寫成了 i ,改掉就a了

code:

#include #include 

#include

using

namespace

std;

const

int n = 205

;int

n, m, segnum, st[n], ed[n], d[n];

intfx, fy, f[n][n][n], q[n];

char

mp[n][n];

inline

void read(int &x)

inline

void chkmax(int &x, int

y) inline

void print(int

p) int

main() }}

}if(d[i] == 2

) }}}

if(d[i] == 3

) }}}

if(d[i] == 4

) }}}

//print(i);

}

int ans = 0

;

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

for(int j = 1; j <= m; j++)

chkmax(ans, f[segnum][i][j]);

printf(

"%d\n

", ans);

return0;

}

還是要仔細a

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 即 用隊中所存下標對應狀態對當前狀態的貢獻為依據選擇是否留在隊...

luoguP2254 NOI2005 瑰麗華爾茲

題目比較好,人比較菜。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 mems...

P2254 NOI2005 瑰麗華爾茲

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