动态编程:查找依赖于顺序的数字总和小于或等于数字的方式的数量

时间:2012-05-28 20:07:06

标签: dynamic-programming

给定一个数字N和一组数字S,找出S的数字的总和小于或等于N的方式的数量.S中的数字可以出现不止一次。例如,当N = 3且S = {1,2}时,答案为6.在此示例中,1,1 + 1,2,1 + 1 + 1,1 + 2,2 + 1小于或等于3。

2 个答案:

答案 0 :(得分:0)

S = {1, 2}时,N = 0, 1, 2...的答案为0, 1, 3, 6, 11, 19, 32...。想想为什么这些数字可能与Fibonacci序列相同,减去2。

答案 1 :(得分:0)

S={n1, n2, …, nk}时,您有f(N)=f(N-n1)+f(N-n2)+…+f(N-nk)。因此,您只需为f(i)计算i < nk,然后就可以使用公式f(n)轻松计算(f(n),f(n+1),…,f(n+nk))=(f(0),f(1),…,f(nk))*A^n,其中Acompanion matrix的{{1}}顺序。