标签:
Time Limit: 3000MS | Memory Limit: 65536K | |
Total Submissions: 13519 | Accepted: 7876 |
Description
Input
Output
Sample Input
1 2 1 3 1 4 2 2 2 3 2 4 2 11 4 11 0 0
Sample Output
1 0 1 2 3 5 144 51205
Source
196K | 16MS |
#include<stdio.h> #include<string.h> #define LL __int64 LL dp[2][1<<12]; int n,m; LL add; void dfs(int i,int p,int pos) { if(pos==m) { dp[i][p]+=add; return; } dfs(i,p,pos+1); if(pos<m-1&&!(p&(1<<pos))&&!(p&(1<<(pos+1)))) { dfs(i,p|(1<<pos)|(1<<(pos+1)),pos+2); } } int main() { while(scanf("%d%d",&n,&m)!=EOF,n||m) { if(n*m%2) { printf("0\n"); continue; } int rt=(1<<m)-1; memset(dp,0,sizeof(dp)); add=1; dfs(0,0,0); int i,j; for(i=1;i<n;i++) { memset(dp[i%2],0,sizeof(dp[i%2])); for(j=0;j<=rt;j++) { if(dp[(i-1)%2][j]) { add=dp[(i-1)%2][j]; dfs(i%2,~j&rt,0); } } } printf("%I64d\n",dp[(n-1)%2][rt]); } }
POJ 题目2411 Mondriaan's Dream(状压DP)
标签:
原文地址:http://www.cnblogs.com/Who-you/p/4856555.html