洛谷3800 Power收集 題解

2022-05-16 12:41:32 字數 795 閱讀 9199

可以把遊戲介面理解成乙個n行m列的棋盤,有k個格仔上有p點,其價值為val(i,j)

初始靈夢可以選擇在第一行的任意乙個格仔出發,每秒她必須下移一格。

靈夢具有乙個左右移動的速度t,可以使她每秒向左或右移動至多t格,也可以不移動,並且不能折返。移動可視為瞬間完成,不經過路途上的點,只能獲得目標格仔的p點。

求最終她能獲得的power值最大是多少?

刷會水……然而我才發現我不會寫單調佇列(雖然事後發現自己是腦子抽了才不會寫)

乙個顯然的o(nmm)的演算法不再贅述。

誒每次的轉移的狀態有重合,誒好像是單調佇列啊。

此題終結。

#include#include

#include

using

namespace

std;

const

int n=4010

;inline

intread()

while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();

return w?-x:x;

}int

f[n][n],q[n];

intmain()

int maxn=0

;

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

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

}printf("%d

",maxn);

return0;

}

+

洛谷 P3800 Power收集 題解

題目 p3800 power收集 單調佇列 dp 考慮 f i j f i j f i j 表示走到位置 i,j i,j i,j 時可以獲得的最大權值 我們發現 f i j f i j f i j 是由 f i j k f i j k f i j k sim f i j k f i j k f i ...

洛谷p3800power收集

原題 一道很不錯的優先佇列題 f i j 的最大值由上一行的狀態有關,轉移方程f i j max f i 1 z a i j z j k,j k 每個轉移會超時,所以我們對上一行建立單調佇列,由1推到m,提前入隊,超出範圍出隊。include include include include incl...

洛谷P3800 Power收集

顯然這是一道dp題,樸素演算法很容易想 dp i j v i j max dp i 1 k j t leq k leq j t 然而這樣的轉移是 o nm 2 的,不合要求,還要繼續優化。注意到 k leq 4000 棋盤的資料是相當稀疏的,那麼我們考慮將有p點的格仔當成乙個結點,建圖。根據題意 必...