标签:
状态选择要详尽、简洁:
搜索问题、动归问题,要选择一个合理的“状态”作为每个搜索/递推的节点,该状态要能够表达问题在每一步骤的全部的有用信息,但也要尽量简洁。
状态细化:
当选取的状态难以进行递推时(常见于分解出的子问题和原问题一样,但不具有无后效性),考虑将状态增加限制条件后分类细化,即增加维度,然后在新的状态上尝试递推。
动态规划有时需要对空间进行优化,例如可以使用滚动数组来代替二维数组。
滚动数组(可以循环利用的一维数组),例如用一维数组模拟二维数组,这要求第n行的数据只在求解第n+1行时用到,在求第n+2,n+3...时都用不到,这样才不用持续保存,可以滚动更新。
有时动态规划的状态比较复杂,看上去需要很多空间,比如一个多维数组才能表示一个状态,这时,可以对状态进行编码,进行压缩后表示。
比如状态和某个集合有关,集合里有一些元素,没有另一些元素,那么可以用一个整数表示该集合,每个元素对应一个bit。
标签:
原文地址:http://www.cnblogs.com/gtarcoder/p/4786874.html