动态规划---状态压缩(即集合上的动态规划)


参考博客:http://godfrey90.iteye.com/blog/725562


一、首先谈谈什么是状态压缩?

状态压缩就是将一个阶段或(集合)的状态使用二进制0、1进行表示,这类问题中,状态只存在两种:有或无。通过二进制来达到节省存储空间和查找效率的作用。

二、什么是动态规划?

动态规划是通过定义某一个状态,这个状态可以通过性质相同的另一个(或多个)状态推导出来,即存在最优子问题。另外,不同问题的子问题中可能存在同样的子问题,这就是重叠子问题。最优子问题、重叠子问题是动态规划的两大特性,如果存在这两种特性,则就可以选择使用动态规划来解题。

如果说状态压缩是数据结构的话,动态规划就是算法。

三、什么类型的题适合用状态压缩动态规划去做?

这类问题一般会设计到棋盘或者网格的题,第i行状态可以通过第i-1行状态递推得到。

例如:n*n的棋盘,放n个车,要求不相互攻击,条件设置比较简单:只有在同行或同列才会攻击。

解:状态为到第i行后各列的放置情况,设第i行的状态为:10011,则第i-1行的状态可以为:00011、10010、10001,所以易知状态转移为:d[i][a]=sum(s[i-1][b])其中a、b之间存在某种联系,本体中是a-b后,只存在一个1。最后d[n][1....1]即为最终结果。

四、推荐题型:

集合上的动态规划---最优配对问题(推荐:*****)

poj 3254---Corn Fields

POJ 2411 Mondriaan's Dream(DP---状态压缩)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值