看了題後不難想到這個題是個dp,而狀態轉移方程為dp[i] = max(dp[k]) (k >=i+l && k <= i+r) + a[i]。如果暴力去dp會多了一層(l,r)的迴圈,可能會超時,所以對區間(l,r)進行優化,用單調佇列進行優化。維護區間【l,r】的最大值即可。
#include typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn = 2e6+7;
using namespace std;
int a[maxn];
int dp[maxn],q[maxn]; //單調佇列存的是下標
int main()
for(int i = n-r+1;i <= n;i++) //對於能跳到對岸的點找乙個最大值即可
ans = max(ans,dp[i]);
cout << ans << endl;
return 0;
}
P1725 琪露諾 單調佇列優化
描述 小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照一種特殊的方式進行移動,當她在格仔i時,她只移動到區間 i l,i r 中的任意一格。你問為什麼她這麼移動,這還不簡單,因為她是笨蛋啊。每乙個格仔都有乙個冰凍指數a i 編號為0的格仔冰凍指數為0。...
P1725 琪露諾 題解(單調佇列)
琪露諾 單調佇列優化的 dp 狀態轉移方程 f i max a i 考慮單調佇列優化。因為剛學,不是很熟悉單調佇列,特寫一篇詳細的解釋。queue 陣列儲存乙個佇列,他的頭部和尾部的下標分別用head和tail表示。f 陣列是 dp 用到的陣列。首先讀入每乙個座標處的價值 a i 列舉 i 從 l ...
洛谷P1725琪露諾 單調佇列 dp
題目描述 在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。小河可以看作一列格仔依次編號為0到n,琪露諾只能從編號小的格仔移動到編號大的格仔。而且琪露諾按照...