Files
python/GESP/Level6/20240301.md
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

1.0 KiB

找一组数字进行模拟

n=5 a=3 b=2 c=1

由此可以整理动态规划的信息如下:

  • 状态表示: f[i] 表示从 i 到 0 的方案数

  • 状态转移: f[i] = f[i-a] + f[i-b]

  • 初始状态: f[n] = 1

  • 目标状态: 因为最后要求是小于$c$的都是可以到达的状态,所以需要从$0$到$c$的$f[i]$进行累加

\sum_{i=0}^{c} f[i]
  • 边界问题处理:
    • 如果$i-a$小于$0$,则f[i-a] = f[0]
    • 如果$i-b$小于$0$,则f[i-b] = f[0]

Q: 为什么要处理边界问题,哪来的边界问题呢? A: 通过上面的数字模拟会发现,$2$可以继续减$3$而到达-1,这种转换路径是有效,但结果是$-1$,用数组下标来存储显然是不合适的,所以需要处理边界问题。 我们可以把这样的情况统统的保存汇集到$0$,这样就保证了数组下标是正的。