第一步先打一个表,就是利用轮廓线DP去打一个没有管有没有分界线组合数量的表

#include<bits/stdc++.h>
using namespace std; const int mod = 1e9 + ;
const int maxn = <<;
int dp[][maxn + ];
int ans[][]; int solve(int n, int m){
if(n * m % == ) return ;
memset(dp, , sizeof(dp));
dp[][] = ;
int ing = , ed = ;
for(int i = ; i < n; i ++){
for(int j = ; j < m; j ++){
swap(ing, ed);
memset(dp[ing], , sizeof(dp[ing]));
for(int sta = ; sta < (<<m); sta ++){
if(sta & (<<j)) dp[ing][sta&(~(<<j))] = (dp[ing][sta&(~(<<j))] + dp[ed][sta]) % mod;//无添加
if((sta & (<<j)) == ) dp[ing][sta | (<<j)] = (dp[ing][sta | (<<j)] + dp[ed][sta]) % mod;//加上2*1(竖放)
if(((sta & (<<j)) == ) && (j != m - )) dp[ing][sta | (<<(j+))] = (dp[ing][sta | (<<(j+))] + dp[ed][sta]) % mod;//加上1*2(横放)
}
}
}
return dp[ing][];
} int main(){
freopen("data.txt", "w", stdout);
for(int i = ; i < ; i ++)
for(int j = ; j < ; j ++)
ans[i][j] = solve(i, j);
for(int i = 0; i < ; i ++){
for(int j = 0; j < ; j ++)printf("%d, ",ans[i][j]);
}
return ;
}

然后用容器原理加上枚举列当前分界线情况去递推容斥。具体如代码:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod=1e9+; LL dp[][]={,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,};
LL f[];
int b[],cnt,siz,n,m;
LL solve(int n,int m){
LL ret = ;
for(int sta = ; sta < ( << (m - )); sta ++){
int cnt = , len = ;
for(int i = ; i < m - ; i ++){
len ++;
if(sta >> i & ){
b[cnt ++] = len;
len = ;
}
}
b[cnt ++] = ++len; for(int i = ; i <= n; i ++){
for(int j = ; j < i; j ++){
LL temp = ;
for(int k = ; k < cnt; k ++)
temp = temp * dp[b[k]][i - j] % mod;
if(!j) f[i] = temp;
else f[i] = ( (f[i] - f[j] * temp % mod) % mod + mod ) % mod;
}
}
if(!(cnt&)) ret = ( (ret - f[n]) % mod + mod ) % mod;
else ret = (ret + f[n]) % mod;
}
return ret;
}
int main(){
while(~scanf("%d%d",&n,&m)) printf("%lld\n",solve(n,m));
return ;
}

Solid Dominoes Tilings (轮廓线dp打表 + 容器)的更多相关文章

  1. 2016 Multi-University Training Contest 1 I. Solid Dominoes Tilings

    Solid Dominoes Tilings Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/O ...

  2. HDU5731 Solid Dominoes Tilings 状压dp+状压容斥

    题意:给定n,m的矩阵,就是求稳定的骨牌完美覆盖,也就是相邻的两行或者两列都至少有一个骨牌 分析:第一步: 如果是单单求骨牌完美覆盖,请先去学基础的插头dp(其实也是基础的状压dp)骨牌覆盖 hiho ...

  3. HDU1565 方格取数 &&uva 11270 轮廓线DP

    方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  4. POJ 3254 Corn Fields (状压DP,轮廓线DP)

    题意: 有一个n*m的矩阵(0<n,m<=12),有部分的格子可种草,有部分不可种,问有多少种不同的种草方案(完全不种也可以算1种,对答案取模后输出)? 思路: 明显的状压DP啦,只是怎样 ...

  5. 【NOI2019模拟2019.7.1】三格骨牌(轮廓线dp转杨图上钩子定理)

    Description \(n,m<=1e4,mod ~1e9+7\) 题解: 显然右边那个图形只有旋转90°和270°后才能放置. 先考虑一个暴力的轮廓线dp: 假设已经放了编号前i的骨牌,那 ...

  6. Mondriaan's Dream 轮廓线DP 状压

    Mondriaan's Dream 题目链接 Problem Description Squares and rectangles fascinated the famous Dutch painte ...

  7. poj2411 Mondriaan's Dream (轮廓线dp、状压dp)

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17203   Accepted: 991 ...

  8. 轮廓线DP POJ3254 && BZOJ 1087

    补了一发轮廓线DP,发现完全没有必要从右往左设置状态,自然一点: 5 6 7 8 9 1 2 3 4 如此设置轮廓线标号,转移的时候直接把当前j位改成0或者1就行了.注意多记录些信息对简化代码是很有帮 ...

  9. HDU4804 Campus Design 轮廓线dp

    跟上面那篇轮廓线dp是一样的,但是多了两个条件,一个是在原图上可能有些点是不能放的(即障碍),所以转移的时候要多一个判断color[i][j]是不是等于1什么的,另外一个是我们可以有多的1*1的骨牌, ...

随机推荐

  1. oracle闪回的使用

    1.闪回查询(原理:依赖于UNDO表空间)查询当前SCN号select current_scn from v$database;误删数据以后select * from table_name as of ...

  2. Oracle 11g服务详细介绍及哪些服务是必须开启的

    成功安装Oracle 11g后,共有7个服务,这七个服务的含义分别为: 1. Oracle ORCL VSS Writer Service: Oracle卷映射拷贝写入服务,VSS(Volume Sh ...

  3. Nginx安装、配置虚拟主机、反向代理、负载均衡

    1.   nginx安装 下载nginx: 官方网站: http://nginx.org/ 使用的版本是1.8.0版本. Nginx提供的源码. 1.1. 要求的安装环境 1.需要安装gcc的环境.y ...

  4. logback logback.xml常用配置详解(二)<appender>

    转自:http://aub.iteye.com/blog/1101260 logback 常用配置详解(二) <appender> <appender>: <append ...

  5. (1.10)SQL优化——mysql 常见SQL优化

    (1.10)常用SQL优化 insert优化.order by 优化 1.insert 优化 2.order by 优化 [2.1]mysql排序方式: (1)索引扫描排序:通过有序索引扫描直接返回有 ...

  6. Python-多线程.md

    # 环境 - xubuntu 16.04 - anaconda - pycharm - python3.6 - https://www.cnblogs.com/jokerbj/p/7460260.ht ...

  7. PowerTCP FTP for .NET 在线e文文档

    http://www.dart.com/help/ptftpnet/webframe.html

  8. Windows 7中200M神秘隐藏分区

    裸机全新安装Windows 7的用户,在安装完成后运行diskmgmt.msc打开磁盘管理器,可以看到在系统分区(一般为C分区)之前有一个大小为200MB的隐藏分区.这个特殊的隐藏分区与Windows ...

  9. oracle常用分析函数 over(partition by xxx order by xxx)

    --over order by 连续累加的意思,把by后面相同的字段,一个组组累加起来SELECT id_,name_,proc_def_id_, count(*) over(order by nam ...

  10. vue中less的使用

    1.安装:npm install less less-loader --save 2.修改webpack.config.js文件,配置loader加载依赖,让其支持外部的less,在原来的代码上添加 ...