rt,今天老师讲区间DP的时候,老师先说了一种这样的做法:
for (int i = 1; i <= n; i++)
for (int j = i + 1; j <= n; j++)
for (int k = i; k < j; k++)
f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j] + s[r] - s[l - 1]);
然后老师就告诉我们,这样子会导致在计算 f[1][2] 的时候需要用到 f[2][2],但是这个时候 f[2][2] 还没算出来。
然后老师就准备讲正经的区间DP,此时我们机房某不知名dalao就说:
那反着推不就好了?
于是代码就变成了这样:
for (int i = n; i >= 1; i--)
for (int j = i + 1; j <= n; j++)
for (int k = i; k < j; k++)
f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j] + s[r] - s[l - 1]);
然后这个代码能AC掉 P1775 石子合并(弱化版)。
求证明/证伪。
或者能告诉我这个东西是什么也行。