Solid Dominoes Tilings (轮廓线dp打表 + 容器)
第一步先打一个表,就是利用轮廓线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打表 + 容器)的更多相关文章
- 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 ...
- HDU5731 Solid Dominoes Tilings 状压dp+状压容斥
题意:给定n,m的矩阵,就是求稳定的骨牌完美覆盖,也就是相邻的两行或者两列都至少有一个骨牌 分析:第一步: 如果是单单求骨牌完美覆盖,请先去学基础的插头dp(其实也是基础的状压dp)骨牌覆盖 hiho ...
- HDU1565 方格取数 &&uva 11270 轮廓线DP
方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- POJ 3254 Corn Fields (状压DP,轮廓线DP)
题意: 有一个n*m的矩阵(0<n,m<=12),有部分的格子可种草,有部分不可种,问有多少种不同的种草方案(完全不种也可以算1种,对答案取模后输出)? 思路: 明显的状压DP啦,只是怎样 ...
- 【NOI2019模拟2019.7.1】三格骨牌(轮廓线dp转杨图上钩子定理)
Description \(n,m<=1e4,mod ~1e9+7\) 题解: 显然右边那个图形只有旋转90°和270°后才能放置. 先考虑一个暴力的轮廓线dp: 假设已经放了编号前i的骨牌,那 ...
- Mondriaan's Dream 轮廓线DP 状压
Mondriaan's Dream 题目链接 Problem Description Squares and rectangles fascinated the famous Dutch painte ...
- poj2411 Mondriaan's Dream (轮廓线dp、状压dp)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17203 Accepted: 991 ...
- 轮廓线DP POJ3254 && BZOJ 1087
补了一发轮廓线DP,发现完全没有必要从右往左设置状态,自然一点: 5 6 7 8 9 1 2 3 4 如此设置轮廓线标号,转移的时候直接把当前j位改成0或者1就行了.注意多记录些信息对简化代码是很有帮 ...
- HDU4804 Campus Design 轮廓线dp
跟上面那篇轮廓线dp是一样的,但是多了两个条件,一个是在原图上可能有些点是不能放的(即障碍),所以转移的时候要多一个判断color[i][j]是不是等于1什么的,另外一个是我们可以有多的1*1的骨牌, ...
随机推荐
- tomcat端口设置
在tomcat安装目录下,编辑/conf/server.properties 更改对应的端口: 然后系统重启就可以了.
- Python开发【模块】:tornado.queues协程的队列
协程的队列 协调生产者消费者协程. from tornado import gen from tornado.ioloop import IOLoop from tornado.queues impo ...
- Requirejs 使用
代码地址 参考地址1 参考地址2 一.不依赖其他模块的module创建 创建math的module // math.js define(function (){ var add = function ...
- (4.7)mysql备份还原——深入解析二进制日志(3)binlog的三种日志记录模式详解
关键词:binlog模式,binlog,二进制日志,binlog日志 目录概述 0.binlog概述 查看binlog日志参数设置: show variables like '%log_bin%'; ...
- dxCalloutPopup 简单使用教程
Panel1.Visible := False; // 设置panel初始不显示 dxCalloutPopup1.PopupControl := Panel1; // 设置弹出窗口内容为哪个控件 dx ...
- 008-js中的正则表达式
查看地址:http://www.runoob.com/js/js-regexp.html 一.正则表达式概述 正则表达式(英语:Regular Expression,在代码中常简写为regex.reg ...
- webuploader.min.js 简单例子
一个百度开发的开源框架 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html& ...
- 学习Shell(一)
查看 Shell Shell 是一个程序,一般都是放在/bin或者/user/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中./etc/shells是一个 ...
- mysql数据具体操作
1.建表操作 前面提到的是简单的建表,这里需要提到一下外键. create table userinfo2( id int auto_increment primary key, name ), ge ...
- wue父子通信和动态路由 还有点击事件直接赋值传参数
这种直接在后面赋值 传值