博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2411 Mondriaan's Dream 解题报告
阅读量:4591 次
发布时间:2019-06-09

本文共 898 字,大约阅读时间需要 2 分钟。

传送门:

Mondriaan's Dream

题目简述

有一个\(W\)\(H\)列的广场,需要用\(1*2\)小砖铺满,小砖之间互相不能重叠,问

有多少种不同的铺法?

输入数据:

只有一行\(2\)个整数,分别为\(W\)\(H\)\((1<=W,H<=11)\)

输出数据:

只有\(1\)个整数,为所有的铺法数。


妥妥状压

我们向上或者向右放砖头。

为什么呢?

\(dp[i][j]\)代表\(i\)\(j\)状态的方案数(\(j\)中的\(1\)代表这个位置在此行时是否被覆盖,不论它是被自己或者别人覆盖的)

此时当前行的\(0\)即可以约束下一行,向上放的过程。向右放即在本行处理。

处理的时候小心一点

code

#include 
#include
#define ll long longconst int N=12;ll dp[N][1<
>(m-dep)&1);//是否需要看上一行的 if(is&&!flag) dfs(line,l_li,dep+1,0,tt<<1|1);//被上一个看且不看上一行 if(!is&&flag) dfs(line,l_li,dep+1,0,tt<<1|1);//没被上一个看且要看上一行 if(!is&&!flag) { if(dep!=m) dfs(line,l_li,dep+1,1,tt<<1|1); dfs(line,l_li,dep+1,0,tt<<1); }//没被上一个看且不看上一行}int main(){ scanf("%d%d",&n,&m); while(m!=0&&n!=0) { memset(dp,0,sizeof(dp)); dp[0][(1<

2018.5.10

转载于:https://www.cnblogs.com/butterflydew/p/9020721.html

你可能感兴趣的文章
V4L2测试时出现Segmentation fault
查看>>
java基础---->java输入输出流
查看>>
[Apple开发者帐户帮助]九、参考(3)支持的功能(iOS)
查看>>
[Xcode 实际操作]九、实用进阶-(4)计算两个日期间的差值
查看>>
XMLHttpRequest对象的使用
查看>>
windows phone 开发常用小技巧 - 退出应用之升级版(三秒内双击退出)
查看>>
Flask框架学习笔记(API接口管理平台 V2.0)
查看>>
Java学习不走弯路教程(3.从文件内容查询开始)
查看>>
Android环境的搭建及Android Studio的安装
查看>>
12.18 Daily Scrum
查看>>
linux环形buff模拟多线程信号量操作
查看>>
一个基本的curl参数
查看>>
[LeetCode] 109. Convert Sorted List to Binary Search Tree_Medium tag: Linked List
查看>>
[Test] Easy automated testing in NodeJS with TestCafe
查看>>
[Node.js] CommonJS Modules
查看>>
杨辉三角
查看>>
一步步实现 仿制Android LOL多玩盒子(一) 概览
查看>>
Discuz 5.x/6.x/7.x投票SQL注入分析
查看>>
python 简单加密算法小计
查看>>
UWP应用使用SQLite库的方法
查看>>