蒙德里安的梦想

蒙德里安的梦想

在这里插入图片描述

思路:
例:
在这里插入图片描述
样例输入:

1 2
1 3
1 4
2 2
2 3
2 4
2 11
4 11
0 0

样例输出:

1
0
1
2
3
5
144
51205

代码模板:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int N = 12;
bool st[1<<N];
long long dp[N][1<<N]; 
int n,m;


int main(){
	while(cin>>n>>m,n||m){
		memset(st,false,sizeof st);
		//预处理 
	for(int i=0;i<1<<n;i++)
	{
		int cnt=0;
		for(int j=0;j<n;j++) //
		{
			if((i>>j&1)==1)
			{
				if(cnt&1) st[i]=true;
				cnt=0;
			}
			else cnt++;
		}
		if(cnt&1) st[i]=true;
	}
	
	//开始dp
	memset(dp,0,sizeof dp);
	dp[0][0]=1; 
	for(int i=1;i<=m;i++)
		for(int j=0;j<1<<n;j++)
			for(int k=0;k<1<<n;k++)
				{
					if(!st[k|j]&&(j&k)==0)
						dp[i][j]+=dp[i-1][k];
				}
	
	cout<<dp[m][0]<<endl;
	}
	
	
		
	return 0;
} 

 

posted @ 2022-03-22 14:08  panse·  阅读(43)  评论(0)    收藏  举报