dp优化

一  决策单调性

决策单调性优化dp即满足对于$i,j(i>j) $如果$dp[j]$从$dp[k]$转移,$dp[i]$从$dp[k1]$转移,则有$k1>=k$

解决该问题有两种方法

1.整体二分

整体二分用于二维dp(高维)

即$dp[i][j]=max(dp[i-1][k]+cost[k][j])$

做法是由于转移数组是已知的

我们可以先计算出区间中点的转移点,则两边的转移点都会被划分到一个区间

易知复杂度$nlogn$

https://codeforces.com/gym/102984/problem/F

2.单调栈

单调栈用于解决一维问题,即转移数组是未知的

$dp[i]=max(dp[j]+cost[j][i])$

当我们从$i-1$转移到$i$时,我们可以计算出,对于$i$,我们可以二分出它在位置$[l,n]$的转移比$i-1$优,在$[1,l-1] (i-1)$更优 于是可以单调栈维护

https://codeforces.com/gym/101981 B

例题比较简单但是gym里过的人都不多

二  wqs二分

posted @ 2021-05-06 14:07  尹吴潇  阅读(105)  评论(0编辑  收藏  举报