Files
python/GESP/Level6/20240301.md

30 lines
1.0 KiB
Markdown
Raw Normal View History

2025-08-30 18:35:01 +08:00
找一组数字进行模拟
$n=5$
$a=3$
$b=2$
$c=1$
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202501211453606.png)
由此可以整理动态规划的信息如下:
- 状态表示: $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$,这样就保证了数组下标是正的。