簡單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 開始入手,也就是挨個考慮每個時間區間的情況來轉移 因為每個區間內傾斜方向相同,也就是這段時間內只能往乙個方向走或不...