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