洛谷P3800 Power收集

2022-04-14 01:54:26 字數 602 閱讀 1546

顯然這是一道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點的格仔當成乙個結點,建圖。根據題意(必須一直向下走)該圖是乙個dag。

邊的構造:將結點按x座標從小到大排序,可以算出從i結點的行到j結點的行經過的時間\(x_j-x_i\),那麼如果這段時間內能從i結點到j結點,那麼建一條從i到j的有向邊。

跑一遍記憶化dfs就行了。

易錯點:不要以為答案就是dfs(1),因為最優解完全可以從空格子開始,起點是不固定的。

#include#include#includeusing namespace std;

struct node

}for(i=1;i<=k;++i)

for(i=1;i<=k;i++)

ans=max(ans,dp[i]);

printf("%d",ans);

return 0;

}

洛谷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收集

據說在紅霧異變時,博麗靈夢單身前往紅魔館,用十分強硬的手段將事件解決了。然而當時靈夢在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 ...