四边形不等式
1d1d
即dp数组一维,筛选判优一个dp值花费一维时间
对于形如dp[i]=min(dp[k]+w(k+1,i)),1<=k<i 的转移式,可以证明如果i>j那么dp[i]的最优决策点比dp[j]的最优决策点大https://oi-wiki.org/dp/opt/quadrangle/,那么此时我们不像2d1d中,可以对当前dp分界点设置上下界,我们只能得到一个单侧的界限,比如已经知道dp[i]的最优分界点在m处,那么下标大于i的dp值的分界点都不小于m,这样就不能减少一维,而是把n变log,模板如下,大概就是每次算出中间位置的dp,然后两侧dp的可枚举区间就少了一半。
1 | void DP(int l, int r, int k_l, int k_r) { |
例题:https://codeforces.com/problemset/problem/321/E
这题其实有人用2d1d的做法……不过我没证明正确性,还是老老实实用可证实的方法。复杂度knlogn
1 |
|