[关闭]
@Dmaxiya 2019-01-01T10:51:40.000000Z 字数 556 阅读 1163

博弈论

板子


SG 函数

  1. const int maxn = 10000 + 100;
  2. int n;
  3. int Array[maxn], SG[maxn];
  4. bool visit[maxn];
  5. // maxn 为“石子”数,n 为 Array 数组大小,Array 数组需从小到大排序
  6. void get_SG() {
  7. SG[0] = 0;
  8. for(int i = 1; i <= 10000; ++i) {
  9. memset(visit, 0, sizeof(visit));
  10. for(int j = 0; j < k; ++j) {
  11. if(i >= Array[j]) {
  12. visit[SG[i - Array[j]]] = true;
  13. }
  14. }
  15. for(int j = 0; j <= 10000; ++j) {
  16. if(!visit[j]) {
  17. SG[i] = j;
  18. break;
  19. }
  20. }
  21. }
  22. }

巴什博弈

题目

一堆物品有 个,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取 个,取走最后一个物品者获胜。

结论

时,先手必败,否则先手必胜。

威佐夫博奕

题目

有两堆物品,分别有 个与 个,两个人轮流取物品,每次可以从任意一堆中取走任意个物品,或者从两堆物品中取走任意多个相同数量的物品,每次最少取一个物品,取走最后一个物品者获胜。

结论

,则先手必败,否则先手必胜。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注