认识DP

来源:互联网 发布:自动打验证码软件 编辑:程序博客网 时间:2024/05/09 05:43

动态规划的核心:状态和状态转移方程

状态转移方程的计算方法:

1、递推计算,关键是边界和计算顺序;

2、记忆化搜索,所谓记忆化搜索就是搜索的形式+动态规划的思想,不必事前确定各状态的计算次序,但要记录每个状态是否被访问过。




动态规划扩展:

1、状态压缩动态规划

需要的基础知识:位运算  ( ~ , & , ^ , | );

下面介绍一些位运算知识点:

判断数i的二进制形式的第j位是否为1 :  i&(1<<j) ,如果为1则大于1,否则结果为0

现假设i&j = x ;如果x == 0,说明在i和j中没有一位同时为1,否则说明至少存在一位同时为1

i&(i<<1);如果i的二进制中有相邻两位都为1,则结果>0;否则结果为0 

~是取反位运算符,比如0011,取反为1100,但是在实际使用中要注意符号问题

如果想判断i的二进制的第32位是否为1,long long a = 1;  if( i & (b<<32)) 通过这个来判断


动态规划的状态有时候比较难,不容易表示出来,需要用一些编码技术,把状态压缩的用简单的方式表示出来。典型方式:当需要表示一个集合有哪些元素时,往往利用2进制用一个整数表示。

一般有个数据 n<16 或者 n<32 这个很可能就是状态DP的标志,因为我们要用一个int的二进制来表示这些状态。要注意好这些数据规模的提示作用。


2、数位DP

数位DP的一般是以数位为单位,通过推到求出状态转移方程。--------------------2014/5/10

0 0
原创粉丝点击