hdu4374(單調佇列優化dp)

2021-07-16 15:05:33 字數 734 閱讀 8058

這題的轉移很明顯。

用dp[i][j] 表示到達i層j位置時的最大得分

sum[i][j] 表示第i層前j個數的和

dp[i][j] = max(max(dp[i - 1][j + k] + sum[i-1][j +k-1] - sum[i - 1][j - 1] + score[i][j]), max(dp[i - 1][j - k] - sum[i-1][j -k] + sum[i - 1][j] + score[i][j]))

因為只能移動t步,則就是在t長的視窗中的最小值

#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

inline int read()

int n,m,x,t;

int sco[105][10005],sum[105][10005],f[105][10005];

int q[10005],id[10005],head,tail;

void work()

} int ans=-inf;

for (int i=1;i<=m;i++) ans=max(ans,f[n+1][i]);

printf("%d\n",ans);

}void clear()

int main()

return 0;

}

hdu4374 單調佇列優化dp

題意就不多說了,直接說思路吧 對每一層的點都有兩種方式到達 左邊不超過t步 或右邊不超過t步 對這兩種方式容易得出 dp i j max dp i j dp i 1 k sum i j sum i k 1 從上層的k向右走過來 dp i j max dp i j dp i 1 k sum i k s...

hdu 4374 dp 單調佇列優化

解法 dp 單調佇列!有乙個的樓房,從第一層某個位置出發上樓,每次能爬上一層樓也可以在同一層左右移動,但是在每一層的移動距離不能超過某個值。現在每個位置都有乙個數值,求從第一層出發到最後一層經過的路徑上最多能取到的最大價值。dp i j 表示 第i行,第j個數字的最大價值!sum i j 表示 第i...

hdu 3530 dp 單調佇列優化

題目 題意 給你乙個長度為n的數列,要求乙個子區間,使得區間的最大值與最小值的差s滿足,m s k,求滿足條件的最長子區間 分析 做了前面幾題後,這題容易想到用兩個單調佇列維護當前最值,作為判斷條件,如果差值大於k了,就去掉較前面的那個佇列元素,並把區間頭更新為它的標號 1,這裡注意差值小於m並不需...