今天美国的院士过来讲课XD以为会很无聊但是谜之好听,而且英语基本上都听懂了的样子♪(´▽`)

逃到图书馆来写解题报告

【题目大意】

给出一个m*n的方格,用2*1的骨牌覆盖有几种情况。

【思路】

最基础的轮廓线DP。分为三种情况:

(1)向上放,必须要满足上面的格子没有被放,且当前不在首行。→新状态=旧状态删去首位,末尾为1;

(2)向左放,必须要满足左边的格子和上面的格子都没有放,且当前不在首列。→新状态=旧状态删去首位,末两位微1;

(3)不放,必须满足上面的格子没有放。新状态=旧状态删去首位,末尾为0。

*轮廓线状压的表示不是按照纵坐标大小从左到右,而是按照从左到右,从上至下的顺序(K4..K0)来的:D

【错误点】

一开始把cur的变换写到最里面一重循环去了orz

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAXN=;
ll dp[][<<MAXN]; void solve(int m,int n)
{
if (m<n) swap(m,n);
int cur=;
memset(dp,,sizeof(dp));
dp[cur][(<<n)-]=;
for (int i=;i<=m;i++)
for (int j=;j<=n;j++)
{
cur^=;
/*cur要放在第二重循环后面,一开始写在了三重循环里面*/
memset(dp[cur],,sizeof(dp[cur]));
/*不要忘了要清空当前状态*/
for (int k=;k<=(<<n)-;k++)
{
//上放
if (i!= && !(k&(<<(n-))))
{
int now=(((k<<)|)&((<<n)-));
dp[cur][now]+=dp[-cur][k];
}
//不放
if (k&(<<(n-)))
{
int now=((k<<)&((<<n)-));
dp[cur][now]+=dp[-cur][k];
}
//左放
if (j!= && (k&(<<(n-))) && !(k&))
{
int now=(((k<<)|)&((<<n)-));
dp[cur][now]+=dp[-cur][k];
}
}
}
cout<<dp[cur][(<<n)-]<<endl;
} int main()
{
int m,n;
while (scanf("%d%d",&m,&n))
{
if (m==n && n==) break;
solve(m,n);
}
return ;
}

【轮廓线DP】POJ2411-Mondriaan's Dream的更多相关文章

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

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

  2. POJ2411 Mondriaan's Dream 轮廓线dp

    第一道轮廓线dp,因为不会轮廓线dp我们在南京区域赛的时候没有拿到银,可见知识点的欠缺是我薄弱的环节. 题目就是要你用1*2的多米诺骨排填充一个大小n*m(n,m<=11)的棋盘,问填满它有多少 ...

  3. $POJ2411\ Mondriaan's\ Dream$ 状压+轮廓线$dp$

    传送门 Sol 首先状压大概是很容易想到的 一般的做法大概就是枚举每种状态然后判断转移 但是这里其实可以轮廓线dp 也就是从上到下,从左到右地放方块 假设我们现在已经放到了$(i,j)$这个位置 那么 ...

  4. POJ2411 Mondriaan's Dream 题解 轮廓线DP

    题目链接:http://poj.org/problem?id=2411 题目大意 给你一个 \(n \times m (1 \le n,m \le 11)\) 的矩阵,你需要用若干 \(1 \time ...

  5. poj2411 Mondriaan's Dream【状压DP】

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

  6. [Poj2411]Mondriaan's Dream(状压dp)(插头dp)

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

  7. poj2411 Mondriaan's Dream[简单状压dp]

    $11*11$格子板上铺$1*2$地砖方案.以前做过?权当复习算了,毕竟以前学都是浅尝辄止的..常规题,注意两个条件:上一行铺竖着的则这一行同一位一定要铺上竖的,这一行单独铺横的要求枚举集合中出现连续 ...

  8. POJ1185 炮兵阵地 和 POJ2411 Mondriaan's Dream

    炮兵阵地 Language:Default 炮兵阵地 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 34008 Accepted ...

  9. POJ2411 Mondriaan's Dream(状态压缩)

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

随机推荐

  1. python初步学习-python模块之 logging

    logging 许多应用程序中都会有日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪.在python中,我们不需要第三方的日志组件,python为我们提供了简单易用.且 ...

  2. 深入理解Spring系列之五:BeanDefinition装载

    转载 https://mp.weixin.qq.com/s/1_grvpJYe8mMIAnebMdz9Q 接上篇<深入理解Spring系列之四:BeanDefinition装载前奏曲>,进 ...

  3. Mac——mac安装软件

    命令行: perl: curl -L http://xrl.us/installperlosx | bash 参考资料: https://blog.csdn.net/yuxin6866/article ...

  4. geoserver-manager发布style失败

    当参数给定没有错误时,最有可能的原因就是: sld文件格式应该以UTF-8无BOM格式编码(自己生成的sld文件多数情况下是以UTF-8格式编码).

  5. 使用 redis 减少 秒杀库存 超卖思路

    由于数据库查询的及插入的操作 耗费的实际时间要耗费比redis 要多, 导致 多人查询时库存有,但是实际插入数据库时却超卖 redis 会有效的减少相关的延时,对于并发量相对较少的 可以一用 publ ...

  6. entos 7 mailx配置163邮箱发送邮件

    配置: .com .com set smtp-auth-user=wcczcl set smtp-auth=login set smtp-use-starttls set ssl-verify=ign ...

  7. xcode7 安装 KSImageNamed

    1.前往Xcode7的插件文件夹,路径如下: ~/Library/Developer/Xcode/Plug-ins 如果有KSImageNamed,右键删除 2.在终端直接输入命令行: default ...

  8. scala学习5--函数二

    to  def test() : Unit = { // for(i <- 1.to(100)){ // println(i) // } for(i <- 1 to 100 ){ prin ...

  9. Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:

    使用自己的jdk

  10. Robot Framework Selenium学习博客

    http://blog.csdn.net/tulituqi/article/details/21888059