关于dp的学习

    二进制优化

    假设背包问题一个物品有8个,我们可以发现可以把这八个分为 1,2,4,1;无论最后选几个(1—8)都可以从这几个数字中选出,也就不需要1,2,3,4,5,6,7,8个一次次的dp了。

也就是把n个分为2的零次方,2的一次方,……和多出来的。这样复杂度减少了很多。

    状态压缩dp

    通俗的说,即用0010100(二进制)的第n位表示第n个东西取还是不取。

    如果这些二进制用十进制表示的话就只有 一个维度了。而且这一个维度能表示所有物品放与不放的情况;这个过程就叫做状态压缩。

    例题:poj的2411.

    题目大意:给出一个n*m的棋盘,问用1*2的多米诺骨牌将其完全覆盖有多少种不同的方案。

    n和m最大都只有11。

    

如果当前格没有被覆盖,说明我们至少可以放一个1*2的方格,如果当前列的下一行也没有被覆盖,那么我们可以放一个

2*1的方格;如果被覆盖, 那么我们继续往当前列的下一行遍历 ,直到把这一列遍历完; 在这个过程中 ,我们能求出

下一列的合法状态(也就是可以到达的状态),这是一个搜索的过程。

具体可以看大佬的分析:https://blog.csdn.net/u013377068/article/details/81054112,太强了QAQ

 

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值