能否从这n件物品中选择若干件放入此背包中,使得放入的重量之和正好为s。如果存在一种符合上述要求的选择,则称此背包问题有解(或称其解为真);否则称此背包问题无解(或称其解为假)。试用递归方法设计求解背包问题的算法。(提示:此背包问题的递归定义如下:)
Ackermann函数A(m,n)可递归定义如下:
试设计一个计算A(m,n)的动态规划算法,该算法只占用O(m)空间(提示:用两个数组val[0:m]和ind[0:m],使得对任何i有val[i]=A(i,ind[i])).
计算多项式Pn(x) –a0xn十a1xn-1+a2xn-2+…+an-1x十an的值, 通常使用的方法是一种嵌套的方法。它可以描述为如下迭代形式:bv=av,bi+1=x×bi+ai+1, i=0, 1,…,n-l。若设bn=Pn(x) , 则问题可以写为如下形式:Pn(x) =x×Pn-1(x)+an, 此处, Pn-i(x) =avxn-1+a1xn-2+…+an-2x+an-1, 这是问题的递归形式。试编写一个函数, 计算这样的多项式的值。
例如,求72和40的最大公因数,即计算GCD(724,344):
GCD(724,344)=GCD(344,724%344)=GCD(344,36)
=GCD(36,344%36)=GCD(36,20)
=GCD(20,36%20)=GCD(20,16)
=GCD(16,20%16)=GCD(16,4)
=GCD(4,16%4)=GCD(4,0)
=4