【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. Revit开发小技巧——撤销操作

    最近开发Revit命令需要限制某些操作,思路是监控用户操作,如果达到限制条件,将操作回退.思路有两种: 1.调用WindowsAPI,发送快捷命令Ctrl+Z. 2.通过Revit底层提供DLL找到回 ...

  2. List集合中的对象进行排序

    类A: public class A implements Comparable<A>{ private Integer id; private String name; public A ...

  3. MATLAB2018a与2016b分类学习模型Java库向上兼容操作

    matlab2016版本无法兼容matlab2018版本Classification Learner创建的分类器 在java环境下,使用matlab2016版本调用matlab2018版本Classi ...

  4. 对PBFT算法的理解

    PBFT论文断断续续读了几遍,每次读或多或少都会有新的理解,结合最近的项目代码,对于共识的原理有了更清晰的认识.虽然之前写过一篇整理PBFT论文的博客,但是当时只是知道了怎么做,却不理解为什么.现在整 ...

  5. kali获得windows的shell后乱码

    输入 chcp 65001

  6. python中__name__属性的使用

    python常用模块目录 1.打印出函数名字而非函数名对应的地址 )打印的是函数地址 def func(): print("我是%s函数"%func) func() ------- ...

  7. 第十二周作业_PSP总结报告

    回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...

  8. c# 程序重启设定

    问题情境: 程序随着时间运行,越来越大.暂时想到的两种方法,一是反攻代码,查看占内存大的函数,是不是没有回收.再就是暴力设定程序定时重启. 解决原理: 定时重启:暂设定timer,时间匹配执行rest ...

  9. C/C++:static用法总结

    前言:static是C/C++中一个很重要的关键字,最近阅读了很多博客和资料,遂在此对自己的学习笔记进行简单的总结并发表在这里 一.C语言中的static • 静态全局变量:在全局变量之前加上关键字s ...

  10. 四则运算2及PSP0设计项目计划

    时间比较紧,我简单写写我的设计思路: 题目在四则运算1的基础上控制产生题目的数量,这个可以用变量控制:打印方式也可选用变量控制,程序的关键是括号的生成.我们可以将整个四则运算式看成()+()的模型,然 ...