8*8地板,每层有256种状态,根据每种状态的互相转换,递推即可求解,下面是代码,可能会有错误,求大神指正~~
#include "stdafx.h"
#include <iostream>
using namespace std;
int sign[8]={0,3,6,12,24,48,96,192};
int val[128][128];
void init()
{
memset(val,0,sizeof val);
for(int i=0;i<128;i++)
{
for(int j=0;j<128;j++)
{
if(i|j==127)
val[i][j]=1;
}
}
}
bool ResonableChar(long long c)
{
for(int i=7;i>=0;i--)
{
if(c>=sign[i])
c^=sign[i];
}
if(c==0)
return true;
else
return false;
}
bool CanTrans(int a,int b)
{
int int1=255^a;
if(((b-int1)==(b^int1))&&ResonableChar(b-int1))
{
return true;
}
else
return false;
}
long long value[8][256];
void get()
{
memset(value,0,sizeof value);
for(int i=0;i<256;i++)
{
if(ResonableChar(i))
value[0][i]=1;
}
for(int i=1;i<8;i++)
{
for(int j=0;j<256;j++)
{
if(value[i-1][j]>0)
{
for(int k=0;k<256;k++)
{
if(CanTrans(j,k))
value[i][k]+=value[i-1][j];
}
}
}
}
}
//int get()
//{
// for(int i=0;i<10;i++)
// memset(a[i],0,sizeof(long long)*256);
//
//}
int _tmain(int argc, _TCHAR* argv[])
{
get();
cout<<value[7][255]<<endl;
system("pause");
return 0;
}