BZOJ1499 瑰麗華爾茲(單調佇列)

2022-04-30 13:06:12 字數 815 閱讀 6310

pro:給出乙個n*m的地圖,剛開始人在(x,y),每次給出一段區間(l,r,t),表示在時間[l,r]內,可以使人向4個方向(t)移動一格,或者不動。求最大可以移動多少格。

sol:考慮每一列(上下移)或者一行(左右移)的情況。以右移為例,我們可以很快列出dp方程:f[x][y][i]=max(f[x][y][i],f[x][j][i]+y-j)。這個dp方程我們可以用單調佇列維護,所以複雜度就是nmk的。

#include#define rep(i,a,b) for(int i=a;i<=b;i++)

using

namespace

std;

const

int maxn=210

;const

int inf=1e9+7

;int dp[maxn][maxn][2

],ans;

char

c[maxn][maxn];

int x[5]=,y[5]=;

int q[maxn][3

],head,tail,n,m,now;

int update(int x,int y,int tp,int

tk)int

get(int tp,int

tk)void work(int x,int y,int tk,int len,int

opt)

}int

main()

printf(

"%d\n

",ans);

return0;

}

BZOJ1499 NOI2005 瑰麗華爾茲

bzoj luogu 首先有乙個很顯然的 o nmt 的 dp 設 dp t i j 表示 t 時刻鋼琴移動到 i,j 位置的最長滑動距離。轉移分滑動以及不動兩種,判一下障礙物就可以了。這樣有50分。然後發現100 的資料中 k le200 而且在每一段中轉移都是完全一樣的,就考慮把 o nmt 的...

BZOJ1499 NOI2005 瑰麗華爾茲

有乙個字元矩陣,表示能走,x 表示不能走,給出起點的座標,起點有一座鋼琴,每單位時間可以移動一格,共有k個時間段,然後再給出每個時間段起始時間和結束時間,以及當前時間段能夠移動的方向。而在某個時間,可以控制鋼琴不動,鋼琴不能走到 x 而且不能走出矩陣 求出鋼琴最多能走多少格 一眼dp題 設f t i...

bzoj1499 NOI2005 瑰麗華爾茲

題目鏈結 給出乙個n m的地圖,剛開始人在 x,y 每次給出一段區間 l,r,t 表示在時間 l,r 內,可以使人向4個方向 t 移動一格。求最大可以移動多少格。考慮每一列 上下移 或者一行 左右移 的情況。以右移為例,我們可以很快列出dp方程 f i x y max f i x y f i 1 x...