比赛 20160323 评测结果 AWAAAAAWWW
题目名称 雕塑安置 最终得分 60
用户昵称 KZNS 运行时间 1.070 s
代码语言 C++ 内存使用 219.66 MiB
提交时间 2016-03-23 20:06:58
显示代码纯文本
  1. //KZNS
  2. #include <fstream>
  3. using namespace std;
  4. //
  5. ifstream fin ("arrange.in");
  6. ofstream fout ("arrange.out");
  7. //
  8. int N, M;
  9. unsigned int xz[23] = {0};
  10. int ck[23][2000000] = {0};
  11. bool ud[23][2000000] = {0};
  12. //
  13. void rin() {
  14. fin >> N >> M;
  15. int a, b;
  16. for (int i = 0; i < M; i++) {
  17. fin >> a >> b;
  18. xz[a] |= (1 << (b-1));
  19. }
  20. }
  21. int CK(int x, unsigned int zz) {
  22. if (ud[x][zz])
  23. return ck[x][zz];
  24. ud[x][zz] = true;
  25. if (x == N) {
  26. for (int i = 0; i < N; i++)
  27. if (!((zz | xz[x]) & (1 << i)))
  28. ck[x][zz]++;
  29. }
  30. else {
  31. for (int i = 0; i < N; i++)
  32. if (!((zz | xz[x]) & (1 << i)))
  33. ck[x][zz] += CK(x + 1, zz | (1 << i));
  34. }
  35. return ck[x][zz];
  36. }
  37. //
  38. int main() {
  39. rin();
  40. fout << CK(1, 0);
  41. return 0;
  42. }
  43. //UBWH