pku 2411 Mondriaan's Dream dp 状态压缩

来源:互联网 发布:淘宝客服工资待遇如何? 编辑:程序博客网 时间:2024/05/21 10:39

 

以前没做过状态压缩的题目,今天是见识了,我看下下面这段精辟的话才做出来的. -_-

 

本该很早就ac的题一直调到现在,why?这次真的是自己的状态很差的原因啊!

 

下午看了一份报告,其他人有dfs的方法,其中有个同学和我是思路一模一样,但是我的数据都没过,思路一开始就对的,错在一个很小的条件判断,很伤人啊,还以为自己的dp找错了呢!看来还要相信自己的实力的。

 

算法我觉得慢简单的,和我上午ac的一个题思路没什么区别,就是每行取二进制状态。

 

设dp[i][k]为第i行状态值为k时的ways。那么找出它与第i-1行的状态之间的关系即可。

 

由于在做第i行dp时必须完全覆盖第i-1行,只要抓住这个条件不放就行。

 

1、如果第i行中有0,则第i-1行一定为1;

 

2、如果第i行中为1的x列第i-1行为0,说明第i行肯定是竖着放的;

 

3、如果第i行中为1的x列第i-1行的该列也为1,可能性只有一个,第i行是横放的,所以第i行的x+1列也必须为1,又因为第i行的x+1列为1是因为横着放的,所以第i-1行的x+1列也必须为1。

 

找到了关系就很简单了。哎呀,一想到这里我就不爽,本该恨早就ac的。

 

哦~,差点忘了,还有初始化的第1行,将它初始化为只存在横着或者不放。

 

本段原话引自: http://gisyhy.blog.163.com/blog/static/129390343200992441558735/

 

ps: 原作者的代码写得很优美.哇咔咔.