這題的轉移很明顯。
用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並不需...