记录编号 331820 评测结果 AAAAAAAAAA
题目名称 放国王 最终得分 100
用户昵称 GravatarHzoi_ 是否通过 通过
代码语言 C++ 运行时间 0.416 s
提交时间 2016-10-28 06:34:52 内存使用 46.67 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#define bit(x) ((1)<<((x)-(1)))
#define LL long long
using namespace std;
namespace mine{
	template<class T>inline void readint(T &__x){
		static int __c;
		static bool __neg;
		__x=0;
		__neg=false;
		do __c=getchar();while(__c==' '||__c=='\n'||__c=='\r'||__c=='\t');
		if(__c=='-'){
			__neg=true;
			__c=getchar();
		}
		for(;__c>='0'&&__c<='9';__c=getchar())__x=__x*10+(__c^48);
		if(__neg)__x=-__x;
	}
	template<class T>inline void writeint(T __x){
		static int __a[40],__i,__j;
		static bool __neg;
		__neg=__x<0;
		if(__neg)__x=-__x;
		__i=0;
		do{
			__a[__i++]=__x%(T)10^(T)48;
			__x/=10;
		}while(__x);
		if(__neg)putchar('-');
		for(__j=__i-1;__j^-1;__j--)putchar(__a[__j]);
	}
}
using namespace mine;
const int maxn=15;
int n,m;
LL f[maxn][1<<12][110]={{{0}}},ans=0;
int main(){
#define MINE
#ifdef MINE
	freopen("placeking.in","r",stdin);
	freopen("placeking.out","w",stdout);
#endif
	readint(n);
	readint(m);
	f[0][0][0]=1;
	for(int i=1;i<=n;i++)for(int j=0;j<bit(n+1);j++){
		if(j&(j>>1))continue;
		int cnt=0;
		for(int l=0;l<n;l++)cnt+=(j>>l)&1;
		for(int k=cnt;k<=m;k++){
			for(int s=0;s<bit(n+1);s++){
				if(s&(s>>1))continue;
				bool ok=true;
				for(int l=1;l<=n;l++)if(j&bit(l)){
					if(l>1&&(s&bit(l-1)))ok=false;
					if(s&bit(l))ok=false;
					if(l<n&&(s&bit(l+1)))ok=false;
				}
				if(!ok)continue;
				f[i][j][k]+=f[i-1][s][k-cnt];
			}
		}
	}
	for(int j=0;j<bit(n+1);j++)ans+=f[n][j][m];
	writeint(ans);
#ifndef MINE
	printf("\n--------------------DONE--------------------\n");
	for(;;);
#endif
	return 0;
}