题意:给一个n*m的方格,用1*2和2*1的方格填满,有多少种方案。n、m<=11。

Sample Input

1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0

Sample Output

1
0
1
2
3
5
144
51205

题解:我们发现n、m很小,状压dp即可,状态转移如下

 1 void dfs(int i,int j,int sta,int nex){
 2 //第i列、j+1行,当前状态sta,下列状态nex
 3     if(j==n){f[i+1][nex]+=f[i][sta];return;}
 4     if(((1<<j)&sta)>0) dfs(i,j+1,sta,nex);
 5         //若此位置被上列占用,跳过
 6     if(((1<<j)&sta)==0) dfs(i,j+1,sta,nex|(1<<j));
 7         //若此位置为空,尝试放1*2
 8     if(j+1<n&&((1<<j)&sta)==0&&((1<<(j+1))&sta)==0) dfs(i,j+2,sta,nex);
 9         //若次位置及下个位置都空,尝试放2*1
10     return;
11 }

初始状态为f[1][0]=1,最终答案为f[m+1][0]。

代码如下:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 using namespace std;
 5 int n,m;
 6 long long f[20][2050];
 7 void dfs(int i,int j,int sta,int nex){
 8     if(j==n){f[i+1][nex]+=f[i][sta];return;}
 9     if(((1<<j)&sta)>0) dfs(i,j+1,sta,nex);
10     if(((1<<j)&sta)==0) dfs(i,j+1,sta,nex|(1<<j));
11     if(j+1<n&&((1<<j)&sta)==0&&((1<<(j+1))&sta)==0) dfs(i,j+2,sta,nex);
12     return;
13 }
14 int main()
15 {
16     while(~scanf("%d%d",&n,&m)){
17         if(!n&&!m) break;
18         memset(f,0,sizeof(f));
19         f[1][0]=1;
20         for(int i=1;i<=m;i++)
21             for(int j=0;j<(1<<n);j++)
22                 if(f[i][j]) dfs(i,0,j,0);
23         printf("%lld\n",f[m+1][0]);
24     }
25     return 0;
26 }

转载于:https://www.cnblogs.com/Beginner-/p/8558450.html

【POJ2411】Mondriaan's Dream相关推荐

  1. 【状压DP+高精】【cofun1370】走道铺砖问题

    [cofun1370]走道铺砖问题 Description 有一个专门为装修设计方案的设计师.在某一天,他接到了一个项目,为一栋正在修建的大楼设计走道的地板铺设方案.此项目的委托人事先便进行了说明:地 ...

  2. poj 2411 Mondriaan#39;s Dream 【dp】

    题目:poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆. ...

  3. Hrbust 1837 Dream【dp】

    Dream Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 13(8 users) Total Accepted: 3(3 users) ...

  4. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  5. 【BERT】BERT模型压缩技术概览

    由于BERT参数众多,模型庞大,推理速度较慢,在一些实时性要求较高.计算资源受限的场景,其应用会受到限制.因此,讨论如何在不过多的损失BERT性能的条件下,对BERT进行模型压缩,是一个非常有现实意义 ...

  6. 【杂谈】如何使用有三AI生态学习计算机视觉和自然语言处理等内容

    有三AI正式做内容已经一年多了,有非常多的粉丝都在使用我们的平台进行学习,不过有三还没有对整个学习生态进行过一次完整的介绍,今天就来给大家详细阐述,如何使用我们平台完成计算机视觉,自然语言处理等方向的 ...

  7. 【杂谈】如何在专家指导下系统性学习自然语言处理

    熟悉有三AI的人应该知道,有三AI在CV领域有春夏秋季划,供大家系统性学习计算机视觉.也有同学问过,咱们NLP怎么没有类似的项目呢! 今天就来了,经过一段时间的准备,这次我们推出了<系统性入门自 ...

  8. 【杂谈】为什么我们从来不追热点,循序渐进学习它不好吗?

    文/编辑 | 言有三 最近疫情影响了我们的原创更新进度,今天我们来简单谈谈有三AI作死三原则,"不接广告","只做系统性原创","不追热点" ...

  9. 【NLP】如何利用BERT来做基于阅读理解的信息抽取

    信息抽取 (Information Extraction: IE)是把文本里包含的信息进行结构化处理,变成计算机能够处理的结构,实体抽取.关系抽取.事件抽取等都属于信息抽取的范畴.在NLP领域,信息抽 ...

最新文章

  1. 构造函数调用虚函数先从子类搜索同名函数
  2. Myeclipse中快速插入HttpServlet子类中doGet和doPost方法
  3. new Random().Next(1, 100); 多线程同时执行结果很高概率相同,
  4. a5松下驱动器参数设置表_松下伺服几个参数需要熟悉并掌握设置方法
  5. territory pop up window是否显示的逻辑,和transaction type差不多
  6. 课题开题报告范文样本_成都汽车职业技术学校举行 2020年省、市、区课题开题报告会...
  7. postgreSQL源码分析——索引的建立与使用——各种索引类型的管理和操作(1)
  8. php让符合条件的复选框选中,多条件查询(复选框条件)
  9. python识别数字程序_Python识别处理照片中的条形码
  10. C/C++教程 第十二章 —— MFC的基本使用
  11. java 歌词解析代码_网易云歌词爬取(java)
  12. iOS开发实例 | Demo:数独小游戏
  13. 建站百科|企业网站logo设计指南
  14. 没有apihost什么意思_热文:2021年没有立春什么意思
  15. Linux Kernel Patched
  16. 在苹果Macbook Pro上安装Windows 7
  17. 芯片CP/FT测试的基本概念理解
  18. 需求分析+辽阳市水库大坝安全检测平台+志豪未来科技有限公司+陈志豪
  19. [国家地理百年纪念典藏全100集][MKV][225M/1][国英双语中字]
  20. java用tkmapper分组查询_tk.mybatis 中的通用Mapper自定义SQL语句

热门文章

  1. 前端性能优化—回流与重绘
  2. JS实现购物车全选、不选、反选的功能(十七)
  3. “任何人请你去他家吃饭,都别空着手去“怎么看待这句话?
  4. 都是打工的,为啥职场中存在着那么多勾引斗角?
  5. 《西游记》中九尾狐狸为什么有太上老君的幌金绳?
  6. 女性一辈子不结婚,会怎么样?
  7. 闲 鱼,进阶技巧,如何提高你的曝光量?
  8. 为什么你写的文字没人看,没人赞?
  9. 自媒体人本质是互联网公司内容运营的角色
  10. 互联网的逻辑和电商的逻辑是不一样的