poj 2411 Mondriaan's Dream 轮廓线dp

2014-11-23 22:54:03 · 作者: · 浏览: 3
题目意思:
给一个n*m的矩形区域,将1*2和2*1的小矩形填满方格,问一共有多少种填法。
解题思路:
用轮廓线可以过。
对每一个格子,枚举上一个格子的状态,得到当前格子的所有状态值。
dp[cur][s]表示当前格子的轮廓线状态为s的情况下的总数
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define eps 1e-6
#define INF 0x1f1f1f1f
#define PI acos(-1.0)
#define ll long long
#define lson l,m,(rt<<1)
#define rson m+1,r,(rt<<1)|1
using namespace std;

/*
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
*/
ll dp[2][1<<15]; //dp[cur][s]表示当前格子的轮廓线状态为s的情况下的总数
int n,m,cur;

void update(int a,int b)
{
   if(b&(1<n)
         swap(n,m);
      memset(dp,0,sizeof(dp));
      dp[0][(1<