依然是生成函数,但是加了一个限制条件:每种方案的硬币总数不能超过100枚。
解决的办法是维护一个状态矩阵:A[i][j];[i]的意义是凑成i元,[j]的意义是用j枚硬币来凑;A[i][j]的意义是用j枚硬币凑成i元的解决方案数目。
于是多项式乘法中的两项相乘就成了状态转移的过程,例如(1+a1*x+a2*x^2+a3*x^3+...)(1+x^5+...),目前凑成3元有a3种方案,则:
A[3][0] + A[3][1] + A[3][2] + A[3][3] = a3
若a3*x^3与x^5相乘,意味着引进1个5元硬币,于是:
A[8][1]增加了A[3][0]种
A[8][2]增加了A[3][1]种
A[8