1 条题解
-
0
单独开 vis 记录有没有算过
#include <bits/stdc++.h> using namespace std; bool vis[1005][1005]; // 标记每组参数有没有算过 bool book[1005][1005]; bool dfs(int a, int b) { if (a > b) swap(a, b); if (vis[a][b] == true) return book[a][b]; if (b % a == 0) return true; // 在 b 减去 i 个 a for (int i = 1; i * a <= b; i++) if (dfs(a, b - i * a) == false) { vis[a][b] = true; return book[a][b] = true; } vis[a][b] = true; return book[a][b] = false; } int main() { int a, b; while (cin >> a >> b) { if (a == 0 && b == 0) break; if (dfs(a, b)) cout << "win\n"; else cout << "lose\n"; } return 0; }
在 book 中同时记录有没有算过
#include <bits/stdc++.h> using namespace std; // -1 表示没算过,0 表示假,1 表示真 int book[1005][1005]; bool dfs(int a, int b) { if (a > b) swap(a, b); if (book[a][b] != -1) return book[a][b]; if (b % a == 0) return true; // 在 b 减去 i 个 a for (int i = 1; i * a <= b; i++) if (dfs(a, b - i * a) == false) return book[a][b] = true; return book[a][b] = false; } int main() { for (int i = 1; i <= 1000; i++) for (int j = 1; j <= 1000; j++) book[i][j] = -1; int a, b; while (cin >> a >> b) { if (a == 0 && b == 0) break; if (dfs(a, b)) cout << "win\n"; else cout << "lose\n"; } return 0; }
- 1
信息
- ID
- 438
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 111
- 已通过
- 35
- 上传者