Mondriaan's Dream
算法
经典题, 好好学一下
首先用一条虚线把矩阵分为两部分, 上面的部分已经填充完毕, 下面还没有完成
那么我们记录这条虚线 (轮廓线) 下方的 \(n\) 个方块, \(0\) 表示没有填充砖块, \(1\) 表示填充了砖块, 那么如何转移呢?
首先规定转移必须只能向上和向左填, 这样可以简化, 并且不影响正确性
那么我们就可以开始分类讨论
令 \(k_0\) 表示当前讨论点左侧的位置, \(k_1\) 表示当前讨论点上面的位置, 当前讨论点为 \(x\)
-
\(x = 0, k_1 = 1\)
把当前位置置 \(0\) , 然后把 \(k_1\) 更新掉 -
\(x = 1, k_1 = 0\)
和 \(k_1\) 一起放竖砖, 把当前位置 \(1\) , 把 \(k_1\) 更新掉 -
\(x = 1, k_0 = 0, k_1 = 1\)
和 \(k_0\) 一起放竖砖, 把 \(k_1\) 更新掉
完成了, 具体的, 令 \(f_{i, j, k}\) 表示目前的位置, 状态, 把 \(i\) 滚掉
代码
今天状态不佳不想打
总结
经典题, 好思路