设为首页 加入收藏

TOP

POJ 2411 Mondriaan's Dream (状态压缩DP)
2014-11-23 19:48:38 来源: 作者: 【 】 浏览:5
Tags:POJ 2411 Mondriaan' Dream 状态 压缩

题意:给定一个矩阵,只能放1*2的木块,问将这个矩阵完全覆盖的不同放法有多少种。

分析:横着放为11,竖着放为竖着的01,所以判断相邻两行是否被完全覆盖:只需判断两行状态合集(j | k)是否是满的, 两种状态是否有冲突(j & k)。

第一行直接预处理就行。

#include    
#include    
#include    
#include    
using namespace std;  
__int64 dp[12][1 << 11]; //横着放为11,竖着放为0   
                       //                    1   
int buff[1 << 11];  
int n,m;  
__int64 ans;  
  
bool judge(int b) {  
    bool flag = 1;  
    while(b) {  
        if(b & 1) {  
            if((b >> 1) & 1) b = b >> 2;  
            else {  
                flag = 0;  
                b = b >> 1;  
            }  
        } else b = b >> 1;  
        if(flag == 0) return 0;  
    }  
    return flag;  
}  
void getbuff() {  
    int total = 1 << 11;  
    for(int i=0; i 
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇对容器元素进行排序 下一篇CF 337B(Routine Problem-公式题)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)