原題
一道很不錯的優先佇列題
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#includeusing namespace std;
int n,m,k,t,f[4001][4001],a[4001][4001];
int main()
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
f[i][j]=-99999;
for(int i=1;i<=m;++i)
f[0][i]=0;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
{if(q[head]maxx) maxx=f[n][i];
cout<
洛谷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點的格仔當成乙個結點,建圖。根據題意 必...
洛谷 P3800 Power收集
據說在紅霧異變時,博麗靈夢單身前往紅魔館,用十分強硬的手段將事件解決了。然而當時靈夢在power達到max之前,不具有 上線收點 的能力,所以她想要知道她能收集多少p點,然而這個問題她答不上來,於是她找到了學oi的你。可以把遊戲介面理解成乙個n行m列的棋盤,有k個格仔上有p點,其價值為val i,j...
洛谷 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 ...