[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?
前缀和优化