可以把遊戲介面理解成乙個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點的格仔當成乙個結點,建圖。根據題意 必...