背包dp
突然发现我一直没有真正理解背包,真正的背包应该是用空间换时间的一种dp方法,本质上就是n个物品选或不选,理论上有
2
n
2^n
2n种可能结果,但是背包利用的就是值域很小这一特点来重叠子结构,所以背包本质上处理的应该是一个集合中的所有物品,选或不选对应权值的变化。
有时候这样的权值甚至是多维度的,我们进行的就是多个维度上的重叠子结构。
可能是负数,可能操作不是加减适用于任意复杂的操作,但是关键在于状态转移的单调性,否则没法进行状态转移(对于特殊情况比如异或,我们就不需要用背包处理了)
另外多项式的乘法过程实际上也是背包问题。