状态压缩DP:蒙德里安的梦想
代码
#include<bits/stdc++.h> using namespace std; int n,m; long long f[12][1<<11]; bool yy[1<<11]; int main(){ while(cin>>n>>m&&n){ for(int i=0;i<1<<m;i++){ bool cnt=0,flag=0; for(int j=0;j<m;j++) if(i>>j&1)flag|=cnt,cnt=0;//|意为“有1就为1”来自NineDream同学 else cnt^=1; yy[i]=flag|cnt?0:1;//三目运算符,不懂可以看看——》https://www.cnblogs.com/myhnb/p/11245031.html } f[0][0]=1; for(int i=1;i<=n;i++) for(int j=0;j<1<<m;j++){ f[i][j]=0; for(int k=0;k<1<<m;k++) if((j&k)==0&&yy[j|k]) f[i][j]+=f[i-1][k]; } cout<<f[n][0]<<endl; } }