Loading

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\) 滚掉

代码

今天状态不佳不想打

总结

经典题, 好思路

posted @ 2024-12-05 20:38  Yorg  阅读(7)  评论(0)    收藏  举报