【POJ2411】Mondriaan's Dream(轮廓线DP)

题面

Vjudge

题解

这题我会大力状压!!!

时间复杂度大概是\(O(2^{2n}n^2)\),设\(f[i][S]\)表示当前第\(i\)行向下伸展出去的状态为\(S\)

那么每次枚举一下当前行的放法,进行转移就好了。

然后就长成了这个样子(不要在意我强行缩减代码长度)

尽管这不是我们本题的重点,然而我还是放份代码

#include<cstdio>
#include<cstring>
int n,m;long long f[12][1<<11];
int main()
{
while(scanf("%d%d",&n,&m))
{
if(n==0)break;memset(f,0,sizeof(f));f[0][0]=1;
for(int i=1;i<=n;++i)
for(int j=0;j<(1<<m);++j)
for(int k=0;k<(1<<m);++k)
{
if(j&k)continue;
int t=j|k;bool fl=true;
for(int l=0;l<m;++l)
if(!(t&(1<<l)))
{
if(t&(1<<(l+1))){fl=false;break;}
if(l==m-1){fl=false;break;}
t|=1<<l;t|=1<<(l+1);
}
if(fl)f[i][k]+=f[i-1][j];
}
printf("%lld\n",f[n][0]);
}
}

标题里都写了是轮廓线\(dp\),那么我们就来轮廓线一下?

我们从上往下,从左往右依次放东西。假设当前填到了位置\((i,j)\)

那么对于当前以及接下来的状态有影响的只有\((i,1..j-1)\)和\((i-1,j..m)\)

一共\(m\)个位置,那么我们把这些位置按照从上往下从左往右的顺序压缩。

考虑如何转移:

1.作为一个竖着放的矩形的下半部分,那么需要\((i-1,j)\)未被覆盖。

2.作为一个横着放的矩形的右半部分,那么需要\((i,j-1)\)未被覆盖。

3.啥都不干,等着后面的格子来覆盖当前位置。

当然,每一项转移都要限制,比如如果当前位置的正上方的位置是空的,那么必须竖着覆盖。

接下来就是大力的转移咯。

#include<cstdio>
#include<cstring>
int n,m;long long f[122][1<<11];
int main()
{
while(scanf("%d%d",&n,&m)&&n)
{
memset(f,0,sizeof(f));f[0][(1<<m)-1]=1;
for(int i=1;i<=n;++i)
for(int j=1,nw=i*m-m+j;j<=m;++j,++nw)
for(int k=0;k<(1<<m);++k)
if(f[nw-1][k])
{
if(i>1&&!(k&1))
f[nw][(k>>1)|(1<<(m-1))]+=f[nw-1][k];
if(j>1&&!(k&(1<<(m-1)))&&(k&1))
f[nw][(k>>1)|(1<<(m-1))|(1<<(m-2))]+=f[nw-1][k];
if(((k&1)||i==1))
f[nw][k>>1]+=f[nw-1][k];
}
printf("%lld\n",f[n*m][(1<<m)-1]);
}
}

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

  1. POJ2411 Mondriaan's Dream 轮廓线dp

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

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

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

  3. poj 2411 Mondriaan's Dream 轮廓线dp

    题目链接: http://poj.org/problem?id=2411 题目意思: 给一个n*m的矩形区域,将1*2和2*1的小矩形填满方格,问一共有多少种填法. 解题思路: 用轮廓线可以过. 对每 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. [C++]linux下实现ls()函数遍历目录

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600794.html 需求:在linux下遍历目录,输出目录中各文件名. 在linux下遍历目录的相关函数有 ...

  2. opengl基础

    opengl opengl是一个由Khronos组织制定并维护的规范(Specification) .是一系列的图形软件编程接口,和gdi类似.opengl有很多封装的库最有名的GLFW库.接下来很多 ...

  3. 6. 使用antd pro构建web页面

    前言 在开始之前,希望我们已经掌握了一部分react的知识,由于没有太多经验,其实我也是属于摸索阶段.这里假定我们已经了解了react,redux和dva/umi相关的知识.并有做过相关练习. 如果还 ...

  4. SSO流程

    SSO SSO又名单点登录,用户只需要登录一次就可以访问权限范围内的所有应用子系统.举个简单的例子,你在百度首页登录成功之后,你再访问百度百科.百度知道.百度贴吧等网站也会处于登录状态了,这就是一个单 ...

  5. 如何掌握 Kubernetes ?系统学习 k8s 的大纲一份

    深度剖析 Kubernetes 深度剖析 k8s 如何学习 Kubernetes ?如何入门 Kubernetes? 为了帮帮初学者,2018 年 InfoQ 旗下(就是你知道的那个 InfoQ 哇) ...

  6. MyBatis学习(一)————纯jdbc编程

    什么是JDBC  JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java ...

  7. nginx之location(root/alias)

    location配置 1. 语法规则(按优先级) =        表示精确匹配,优先级最高 ^~      表示uri以某个常规字符串开头,用于匹配url路径(而且不对url做编码处理,例如请求/s ...

  8. Nginx 使用(server参数配置)

    文件地址nginx/conf/Nginx.conf 文件地址;nginx/conf/Nginx.conf [java] view plain copy server {# 服务名及配置,一个服务下可以 ...

  9. [BUAA OO]第一次博客作业

    第一次作业 第一次进行面向对象的编程,不论是针对数据设计类还是对方法进行合适的归于不同类中,都不是很熟悉.所写出来的程序还是面向过程+有函数的类(虽然现在很大程度上感觉起来也是这样).索性作业难度并不 ...

  10. selenium+python 自动化

    <a class="big_images_new" target="_blank" href="http://photo.xcar.com.cn ...