当前位置: 代码迷 >> 综合 >> [luogu P1990] 覆盖墙壁
  详细解决方案

[luogu P1990] 覆盖墙壁

热度:40   发布时间:2023-12-08 06:03:39.0

[luogu P1990] 覆盖墙壁

  • 题目描述
  • 解题过程
    • 思路
    • 代码
    • 优化
    • 代码(优化后)
  • 感想

题目描述

点击此处题目描述

解题过程

递推

思路

本蒟蒻弱弱地看了题解才知道思路

f [ i ] f[i] f[i] 表示铺满前 i i i 列墙壁的方案数

如果最后以这种状态结尾,方案数是 f [ i ? 1 ] f[i - 1] f[i?1]

示意图
如果以这种状态结尾,方案数就是 f [ i ? 2 ] f[i-2] f[i?2]

示意图

如果放 L 形,因为 L 形可以翻转,所以方案数要乘 2 ,放两个 L 形结尾,方案数就是 f [ i ? 3 ] f[i - 3] f[i?3]
放两个 L 形 和 一个 竖着的 结尾,方案数就是 f [ i ? 4 ] f[i - 4] f[i?4]
……
方案数一直到 f [ 0 ] f[0] f[0]
最后方案为 2 ? ( f [ i ? 3 ] + f [ i ? 4 ] + … + f [ 0 ] ) 2 * (f[i-3]+f[i-4]+…+f[0]) 2?(f[i?3]+f[i?4]++f[0])

因此 f i = 2 ? ∑ k = 0 i ? 3 f k + f i ? 1 + f i ? 2 = ∑ k = 0 i ? 3 f k + ∑ k = 0 i ? 1 f k f_i = 2*\sum_{k=0}^{i - 3} f_k + f_{i-1} + f_{i-2} = \sum_{k=0}^{i - 3} f_k + \sum_{k=0}^{i - 1} f_k fi?=2?k=0i?3?fk?+fi?1?+fi?2?=k=0i?3?fk?+k=0i?1?fk?

前缀和优化