状态转移方程
f(l, r)= min{f(l, k) + f(k + 1, r)} + w(l, r), l <= k < r
例子
https://www.luogu.com.cn/problem/P1775
设有N(N≤300)堆石子排成一排,其编号为1,2,3,⋯,N。每堆石子有一定的质量mi(mi≤1000)。现在要将这N堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻。合并时由于选择的顺序不同,合并的总代价也不相同。试找出一种合理的方法,使总的代价最小,并输出最小代价。
令f(i, j)表示第i到j堆合并的最小代价,w(i, j)表示第i到j堆的质量之和,状态转移方程为:
f(i, i) = 0, 0 <= i < N
f(i, j) = min{f(i, k) + f(k + 1, j)} + w(i, j), i <= k < j
vector<vector<int>> f(N, vector<int>(N, INT_MAX));
for (int i = 0; i < N; ++i) {
f[i][i] = 0;
}
for (int len = 1; len < N; ++len) {
for (int i = 0; i < N - len; ++i) {
int j = i + len;
for (int k = i; k < j; ++k) {
if (f[i][k] + f[k + 1][j] + w[i][j] < f[i][j]) {
f[i][j] = f[i][k] + f[k + 1][j] + w[i][j];
}
}
}
}
时间复杂度为O(n^3),在f(i, j)满足一定条件的情况下,时间复杂度可以优化到O(n^2)
四边形不等式
如果对于任意l1 <= l2 <= r1 <= r2,w(l, r)满足:
区间包含单调性:w(l2, r1) <= w(l1, r2)
四边形不等式:w(l1, r1) + w(l2, r2) <= w(l1, r2) + w(l2, r1)
那么f(l, r)满足:
四边形不等式:f(l1, r1) + f(l2, r2) <= f(l1, r2) + f(l2, r1)
证明
1、l1 = l2或r1 = r2
显然成立
2、l1 < l2 = r1 < r2
u, v分别表示f(l1, r2), f(l2, r1)的最优决策点
l1 <= u < r2, l2 <= v < r1
(a) u < r1
f(l1, r1) <= f(l1, u) + f(u + 1, r1) + w(l1, r1) // l1 <= u < r1
f(l1, r1) + f(l2, r2) <= f(l1, u) + f(u + 1, r1) + w(l1, r1) + f(l2, r2)
<= f(l1, u) + f(u + 1, r2) + w(l1, r2) + f(l2, r1)
= f(l1, r2) + f(l2, r1)
其中:
f(u + 1, r1) + f(l2, r2) <= f(u + 1, r2) + f(l2, r1) // u + 1 <= l2 = r1 < r2
w(l1, r1) <= w(l1, r2)
数学归纳法,根据u + 1 <= l2 = r1 < r2推出l1 < l2 = r1 < r2
(b) u >= r1
f(l2, r2) <= f(l2, u) + f(u + 1, r2) + w(l2, r2) // l2 <= u < r2
f(l1, r1) + f(l2, r2) <= f(l1, r1) + f(l2, u) + f(u + 1, r2) + w(l2, r2)
<= f(l1, u) + f(l2, r1) + f(u + 1, r2) + w(l1, r2)
= f(l1, r2) + f(l2, r1)
其中:
f(l1, r1) + f(l2, u) <= f(l1, u) + f(l2, r1) // l1 < l2 = r1 <= u
w(l2, r2) <= w(l1, r2)
数学归纳法,根据l1 < l2 = r1 <= u推出l1 < l2 = r1 < r2
归纳过程如下:
(1)当[l1, l2]长度为0或[r1, r2]长度为0时,成立
(2)当[l1, l2]长度为1且[r1, r2]长度为1时,
(a)u < r1,[u + 1, l2]长度为0,根据(1),成立
(b)u >= r1,[r1, u]长度为0,根据(1),成立
(3)当[l1, l2]长度为1且[r1, r2]长度为2时,
(a)u < r1,[u + 1, l2]长度为0,根据(1),成立
(b)u >= r1,[r1, u]长度为0/1,根据(1)/(2),成立
(4)当[l1, l2]长度为2且[r1, r2]长度为1时,
(a)u < r1,[u + 1, l2]长度为0/1,根据(1)/(2),成立
(b)u >= r1,[r1, u]长度为0,根据(1),成立
(5)当[l1, l2]长度为2且[r1, r2]长度为2时,
(a)u < r1,[u + 1, l2]长度为0/1,根据(1)/(3),成立
(b)u >= r1,[r1, u]长度为0/1,根据(1)/(4),成立
...
3、l1 < l2 < r1 < r2
u, v分别表示f(l1, r2), f(l2, r1)的最优决策点
l1 <= u < r2, l2 <= v < r1
(a) u <= v
f(l1, r1) <= f(l1, u) + f(u + 1, r1) + w(l1, r1) // l1 <= u < r1
f(l2, r2) <= f(l2, v) + f(v + 1, r2) + w(l2, r2) // l2 <= v < r2
以上两式相加:
f(l1, r1) + f(l2, r2) <= f(l1, u) + f(u + 1, r1) + w(l1, r1) + f(l2, v) + f(v + 1, r2) + w(l2, r2)
<= f(l1, u) + f(u + 1, r2) + w(l1, r2) + f(l2, v) + f(v + 1, r1) + w(l2, r1)
= f(l1, r2) + f(l2, r1)
其中:
f(u + 1, r1) + f(v + 1, r2) <= f(u + 1, r2) + f(v + 1, r1) // u + 1 <= v + 1 <= r1 < r2
w(l1, r1) + w(l2, r2) <= w(l1, r2) + w(l2, r1)
数学归纳法,根据u + 1 <= v + 1 <= r1 < r2推出l1 < l2 < r1 < r2
(b) u > v
f(l1, r1) <= f(l1, v) + f(v + 1, r1) + w(l1, r1) // l1 < v < r1
f(l2, r2) <= f(l2, u) + f(u + 1, r2) + w(l2, r2) // l2 < u < r2
以上两式相加:
f(l1, r1) + f(l2, r2) <= f(l1, v) + f(v + 1, r1) + w(l1, r1) + f(l2, u) + f(u + 1, r2) + w(l2, r2)
<= f(l1, u) + f(u + 1, r2) + w(l1, r2) + f(l2, v) + f(v + 1, r1) + w(l2, r1)
= f(l1, r2) + f(l2, r1)
其中:
f(l1, v) + f(l2, u) <= f(l1, u) + f(l2, v) // l1 < l2 <= v < u
w(l1, r1) + w(l2, r2) <= w(l1, r2) + w(l2, r1)
数学归纳法,根据l1 < l2 <= v < u推出l1 < l2 < r1 < r2
归纳过程如下:
(1)当[l2, r1]长度为0时,成立
(2)当[l2, r1]长度为1时,
(a)u <= v,[v + 1, r1]长度为0,根据(1),成立
(b)u > v,[l2, v]长度为0,根据(1),成立
(3)当[l2, r1]长度为2时,
(a)u <= v,[v + 1, r1]长度为0/1,根据(1)/(2),成立
(b)u > v,[l2, v]长度为0/1,根据(1)/(2),成立
...
m(l, r - 1) <= m(l, r) <= m(l + 1, r)
如果f(l, r)满足:
四边形不等式:f(l1, r1) + f(l2, r2) <= f(l1, r2) + f(l2, r1)
那么:
m(l, r - 1) <= m(l, r) <= m(l + 1, r), 其中m(l, r)表示f(l, r)的最小最优决策点
证明
k1 = m(l, r - 1)
k = m(l, r)
k2 = m(l + 1, r)
证明k1 <= k <= k2
1、如果k < k1
f(l, k) + f(k + 1, r) <= f(l, k1) + f(k1 + 1, r)
f(k + 1, r - 1) + f(k1 + 1, r) <= f(k + 1, r) + f(k1 + 1, r - 1) // k + 1 < k1 + 1 <= r - 1 < r
以上两式相加:
f(l, k) + f(k + 1, r - 1) <= f(l, k1) + f(k1 + 1, r - 1)
上式表示k是比k1更小的最优决策点,与k1是最小最优决策点矛盾,所以k >= k1
2、如果k > k2
f(l + 1, k2) + f(k2 + 1, r) <= f(l + 1, k) + f(k + 1, r)
f(l, k2) + f(l + 1, k) <= f(l, k) + f(l + 1, k2) // l < l + 1 <= k2 < k
以上两式相加:
f(l, k2) + f(k2 + 1, r) <= f(l, k) + f(k + 1, r)
上式表示k2是比k更小的最优决策点,与k是最小最优决策点矛盾,所以k <= k2
所以k1 <= k <= k2
参考
https://blog.csdn.net/weixin_43914593/article/details/105150937
文章详细证明了在满足特定区间单调性和四边形不等式的条件下,函数f(l,r)也遵循四边形不等式,并探讨了最优决策点的性质。通过数学归纳法展示了在不同情况下的不等式关系,进一步证明了相关性质的等价性。
&spm=1001.2101.3001.5002&articleId=129395360&d=1&t=3&u=f28db2d3105b44d48ee6abb9641b81e7)

被折叠的 条评论
为什么被折叠?



