【题目链接】
http://acm.hdu.edu.cn/showproblem.php?pid=1847
【算法】
我们知道,每一种状态,要么必胜,要么必败
记忆化搜索即可
【代码】
#include<bits/stdc++.h> using namespace std; #define MAXN 1010 int n; int f[MAXN]; inline bool dfs(int n) { int i; if (f[n] != -1) return f[n]; f[n] = false; for (i = 0; i <= 10; i++) { if (n - (1 << i) >= 0) f[n] |= (!dfs(n-(1<<i))); } return f[n]; } int main() { memset(f,255,sizeof(f)); f[0] = false; while (scanf("%d",&n) != EOF) { if (dfs(n)) printf("Kiki "); else printf("Cici "); } return 0; }