poj2411

来源:互联网 发布:淘宝网正品手提包女 编辑:程序博客网 时间:2024/06/05 16:17
#include
#include
using namespace std;
int tran[14000][2];
double b[13][2100];
int h,w,tra;
void dfs(int i,int from,int to){
if(i>w) return;
if(i==w){
tran[tra][0]=from;
tran[tra++][1]=to;
return;
}
dfs(i+2,(from<<2)+3,(to<<2)+3);
dfs(i+1,(from<<1)+1,to<<1);
dfs(i+1,from<<1,(to<<1)+1); 
}
void dp(){
  memset(b,0.00,sizeof(b));
b[0][(1<<w)-1]=1;
for(int i=1;i<=h;i++)
  for(int j=0;j
  b[i][tran[j][1]]+=b[i-1][tran[j][0]];
}
int main(){
 while(scanf("%d%d",&h,&w)&&h){
if(h
int t=h;
h=w;
w=t;
}
tra=0;
dfs(0,0,0);
dp();
printf("%.0f\n",b[h][(1<<w)-1]);
 }
 return 0;
}

0 0
原创粉丝点击