算法基于原理,从原理出发,看看为什么动态dp到底能够省时,其实当重量为k时有n种组合,1+5+9=15和3+5+6=15这两个15是否是同一个东西呢,在普通递归算法这两个是不同的"15"虽然它的值一样,但回溯算法或者动态dp认为这两个"15"本来就是同一个东西,第二次搜到15的时候直接利用第一次出现"15"的状态就可以了~
当然如果数稀疏背包每个数字出现的频数比较少的时候这算法局会慢慢变成传统的枚举算法了~
通常情况下背包的最大容量会比所有组合数少很多,那意味着什么呢,意味着同一个k值存在很多不同的组合,由于每个相同的k值拥有同一种状态或者叫合并成同一个k值,所以这就是动态规划或者回溯能够优化的地方
~
[此贴子已经被作者于2017-12-25 16:28编辑过]