动态规划(一).ppt

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 如N=5 ,则输出2(4+1,3+2) 从样例数据不难看出方案总数可能会达到很大,因此本题用搜索是行不通的,我们可以用动态规划来解决它。 设f[I,j,k]表示用j块砖来组建共I个台阶的楼梯,楼梯的最后一级台阶由k块砖组成的方案总数 f[I,j,k] = ∑f[I – 1, j – k, k1] (1=k1k) 而总方案数为:∑f[I,n,k] (1=I=最大台阶数 ,1=k=n) 该 算法的时间复杂度为:o(n^4) 空间复杂度为:o(n^3), 即便是用滚动数组也要n^2的空间。 无论从时间还是空间上来看,本算法都要进行优化。 其实我们可以将f数组降一维。 设f[I,J]表示用I块砖组建楼梯,楼梯最后一级由j块砖组成的方案数。 F[I,J]= ∑f[I-j,j1] (1=j1j) 最后的方案总数为:∑f[n,I] (1=I=n - 1) 经过重新定义后的时间复杂度为:o(n^3) 空间复杂度为:o(n^2) 虽然本算法已经比较高效了,但当n=500时,还是要耗很多时间,我们还要作进一步优化。 优化动态规划的方法一般为降维和减少重复计算,本算法如果要再降一维比较困难,看来只有考虑如何减少重复计算了。

文档评论(0)

1亿VIP精品文档

相关文档