一 决策单调性
决策单调性优化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二分