比赛 20160323 评测结果 AWAAAAAWWW
题目名称 雕塑安置 最终得分 60
用户昵称 KZNS 运行时间 1.070 s
代码语言 C++ 内存使用 219.66 MiB
提交时间 2016-03-23 20:06:58
显示代码纯文本
//KZNS
#include <fstream>
using namespace std;
//
ifstream fin ("arrange.in");
ofstream fout ("arrange.out");
//
int N, M;
unsigned int xz[23] = {0};
int ck[23][2000000] = {0};
bool ud[23][2000000] = {0};
//
void rin() {
	fin >> N >> M;
	int a, b;
	for (int i = 0; i < M; i++) {
		fin >> a >> b;
		xz[a] |= (1 << (b-1));
	}
}
int CK(int x, unsigned int zz) {
	if (ud[x][zz])
		return ck[x][zz];
	ud[x][zz] = true;
	if (x == N) {
		for (int i = 0; i < N; i++)
			if (!((zz | xz[x]) & (1 << i)))
				ck[x][zz]++;
	}
	else {
		for (int i = 0; i < N; i++)
			if (!((zz | xz[x]) & (1 << i)))
				ck[x][zz] += CK(x + 1, zz | (1 << i));
	}
	return ck[x][zz];
}
//
int main() {
	rin();
	fout << CK(1, 0);
	return 0;
}
//UBWH