Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 2844 | Accepted: 1036 |
Description
Input
Output
Sample Input
2 2 3 2 4 2
Sample Output
LOSE LOSE WIN
Source
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <set> 6 7 using namespace std; 8 9 const int MAX_N = 205; 10 int dp[MAX_N][MAX_N]; 11 12 int grundy(int w, int h) { 13 if(dp[w][h] != -1) return dp[w][h]; 14 15 set<int> s; 16 for(int i = 2; w - i >= 2; i++) { 17 s.insert(grundy(i, h) ^ grundy(w - i,h)); 18 } 19 for(int i = 2; h - i >= 2; ++i) { 20 s.insert(grundy(w, i) ^ grundy(w, h - i)); 21 } 22 23 int res = 0; 24 while(s.count(res)) res++; 25 return dp[w][h] = res; 26 } 27 28 int main() 29 { 30 //freopen("sw.in","r",stdin); 31 int w, h; 32 33 for(int i = 1; i <= 200; ++i) { 34 for(int j = 1; j <= 200; ++j) dp[i][j] = -1; 35 } 36 while(~scanf("%d%d",&w,&h)) { 37 printf("%s\n",grundy(w, h) ? "WIN" : "LOSE"); 38 } 39 //cout << "Hello world!" << endl; 40 return 0; 41 }
原文:http://www.cnblogs.com/hyxsolitude/p/3719353.html