参考blog

http://m.blog.csdn.net/blog/u012760629/36927465

http://www.cppblog.com/menrowitianya/archive/2014/06/23/207386.html





sgu131

题意:给你一个n*m的矩形,可以填充1*2或者缺一角的2*2矩形,求填发?



输入:

n,m(n,m<9)



输出:

T



思路:DP+DFS解决,代码大概就是固定模式,先从行开始遍历,每行是一个阶段,对于每一行以及下一行,你可以找出状态转移方程dp[i+1][status2]+=dp[i][status1],因为后面一行的状态必然是累加上前面一行的状态,然后分析对于每一行状态,你必须要用DFS来递归遍历所有情况,因为输入比较小,当前行的每一列的摆放必然会影响下下一行的摆放,所以可以设u1,u2两个变量来判断是否影响。

#include<cstdio>
#include<cstring>
long long dp[11][1<<9];
int n,m,i; void dfs(int row,int status1,int status2,int u1,int u2)
{
if (row==m)
{
idp (u1==0 && u2==0) dp[i+1][status2]+=dp[i][status1];
return;
}
if (u2==0)
{
if (u1==0)
{
dfs(row+1,status1<<1,(status2<<1)+1,0,0);
dfs(row+1,status1<<1,(status2<<1)+1,1,0);
dfs(row+1,status1<<1,(status2<<1)+1,0,1);
}
dfs(row+1,(status1<<1)+1-u1,(status2<<1)+1,0,1);
dfs(row+1,(status1<<1)+1-u1,(status2<<1)+1,1,1);
}
if (u1==0) dfs(row+1,(status1<<1),(status2<<1)+u2,1,1);
dfs(row+1,(status1<<1)+1-u1,(status2<<1)+u2,0,0);
} int main()
{
while(scandp("%d%d",&n,&m)!=EOF)
{
//m=n=0;
memset(dp,0,sizeof(dp));
if (n<m)
{
int t=n;
n=m;
m=t;
}
dp[0][(1<<m)-1]=1;
for (i=0; i<n; i++) dfs(0,0,0,0,0);
printdp("%I64d\n",dp[n][(1<<m)-1]);
}
return 0;
}

SGU131--NYOJ435的更多相关文章

  1. SGU131 - Hardwood floor(状态压缩DP)

    题目大意 给定一个N*M大小的矩形,要求你用1*2和2*2(缺个角)的砖块把矩形铺满(不能重叠),问总共有多少种铺法? 题解 受POJ2411的影响,怎么都没想到3,4,5,6这几种情况该怎么放置,看 ...

  2. 别人整理的DP大全(转)

    动态规划 动态规划 容易: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ...

  3. dp题目列表

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

  4. poj 动态规划题目列表及总结

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

  5. poj动态规划列表

    [1]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 13 ...

  6. SGU Volume 1

    SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...

  7. POJ 动态规划题目列表

    ]POJ 动态规划题目列表 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322 ...

  8. poj 动态规划的主题列表和总结

    此文转载别人,希望自己可以做完这些题目. 1.POJ动态规划题目列表 easy:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, ...

  9. 别人整理的dp题目

    动态规划 动态规划 容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276, 1322, 14 ...

随机推荐

  1. jquery ajax (2)实例 .GET

    1js 代码 $(function(){ $("#send").click(function(){ $.get("get3.php", { username : ...

  2. 转:Python 与 Excel 不得不说的事

    数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 ...

  3. css()和 attr()的区别

  4. 转:Centos6.3添加解码器播放MP3和常见视频音频

    原文来自于:http://blog.csdn.net/odaynot/article/details/8462273 参考地址: http://wiki.centos.org/AdditionalRe ...

  5. 倒水问题-->经典面试题目

    题目详细: 有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水.我们还有一个足够大的水缸,足够容纳C升水.起初它是空的,我们只能往水缸里倒入水,而不能倒出.可以进行的操作是:把一个容器灌满 ...

  6. Web应用指纹识别

    http://danqingdani.blog.163.com/blog/static/186094195201493121834603/

  7. hdu5126stars

    http://acm.hdu.edu.cn/showproblem.php?pid=5126 首先,对于一个询问,用容斥原理可以拆成8个询问,于是询问变成:给定一个四元组$(i,x_i,y_i,z_i ...

  8. yui datatable动态修改行号

    相关函数 getRecord  :YAHOO.widget.Record getRecord ( row ) For the given identifier, returns the associa ...

  9. Linux网卡驱动架构分析

    一.网卡驱动架构 由上到下层次依次为:应用程序→系统调用接口→协议无关接口→网络协议栈→设备无关接口→设备驱动. 二.重要数据结构 1.Linux内核中每一个网卡由一个net_device结构来描述. ...

  10. Emacs添加主题插件(Win系统)

    Emacs添加主题插件(Win系统) */--> /* @licstart The following is the entire license notice for the JavaScri ...