文章标题 POJ 2411 : Mondriaan's Dream (状态压缩DP)
来源:互联网 发布:python用什么编译器 编辑:程序博客网 时间:2024/06/07 08:29
Mondriaan’s Dream
转自 http://www.cnblogs.com/scau20110726/archive/2013/03/14/2960448.html
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <queue>#include <set>#include <map>#include <algorithm>#include <math.h>#include <vector>using namespace std;typedef long long ll;const int mod=1e9+7;const int maxn=1e5+10;int n,m;ll dp[15][1<<12];bool judge(int x){ for (int i=0;i<m;){ if (x&(1<<i)){ if (i==m-1)return false; if (x&(1<<(i+1)))i+=2; else return false; } else i++; } return true;}bool OK(int now,int pre){ for (int i=0;i<m;){ if ((now&(1<<i))){//第i行第j列为1 if (pre&(1<<i)){//第i-1行第j列也为1,那么第i行必然是横放 //第i行和第i-1行的第j+1都必须是1,否则是非法的 if (i==m-1)return false; if ((now&(1<<(i+1)))==0)return false; if ((pre&(1<<(i+1)))==0)return false; i+=2; }else { i++;//第i-1行第j列为0,说明第i行第j列是竖放 } }else {//第i行第j列为0,那么第i-1行的第j列应该是已经填充了的 if (pre&(1<<i)) i++;//已经填充 else return false; } } return true;}int main(){ while (scanf ("%d%d",&n,&m)&&n&&m){ if ((n&1)&&(m&1)){ printf ("0\n"); continue; } if (n<m)swap(n,m);//交换后n是行m是列,m较小,那么状态数也可以相应减少 memset (dp,0,sizeof (dp)); for(int i=0;i<(1<<m);i++){//枚举第一行所有可能的状态 if (judge(i)){ dp[1][i]=1; } } for (int i=2;i<=n;i++){ for (int j=0;j<(1<<m);j++){ for (int k=0;k<(1<<m);k++){ if (OK(j,k)){ dp[i][j]+=dp[i-1][k]; } } } } printf ("%lld\n",dp[n][(1<<m)-1]); } return 0;}
阅读全文
0 0
- 文章标题 POJ 2411 : Mondriaan's Dream (状态压缩DP)
- POJ 2411 Mondriaan's Dream 状态压缩(DP)
- poj 2411 Mondriaan's Dream (状态压缩dp 入门)
- POJ 2411 Mondriaan's Dream (状态压缩DP)
- poj 2411 Mondriaan's Dream(状态压缩DP)
- POJ 2411 Mondriaan's Dream (dp + 状态压缩)
- poj 2411 Mondriaan's Dream (状态压缩dp)
- poj 2411 Mondriaan's Dream(状态压缩+dp)
- POJ - 2411 Mondriaan's Dream(状态压缩DP)
- poj 2411 Mondriaan's Dream(状态压缩DP)
- poj 2411 Mondriaan's Dream(状态压缩dp)
- poj 2411 Mondriaan's Dream (状态压缩dp)
- POJ 2411 Mondriaan's Dream 状态压缩DP
- POJ 2411 Mondriaan's Dream 状态压缩dp
- POJ 2411 Mondriaan's Dream(DP---状态压缩)
- poj 2411/hdu 1400 Mondriaan's Dream 状态压缩dp
- HDOJ 1400 & POJ 2411 - Mondriaan's Dream 状态压缩DP
- poj 2411 Mondriaan's Dream(状态压缩dp)
- mysql列的值默认不区分大小写
- 解题报告:CodeForces
- 出现"若 要针对 .NET Framework 4.0 或更高版本进行编译,则提供程序选项中“compilerVersion”特性的值必须为“v4.0”或更高版本。若要针对 .NET Frame
- 2016"百度之星"
- PyOpenCL教程(1)
- 文章标题 POJ 2411 : Mondriaan's Dream (状态压缩DP)
- 揭开PC-Lint9的神秘面纱
- UVA 227
- linux 修改主机名
- ASP.NET Ajax、PageMethods完整代码
- 如何让vue文件中的代码在Sublime Text 3中高亮?
- CSDN-markdown编辑器 参考
- 面向对象还是面向过程
- struts2--实现文字过滤功能