【Acwing 219. 剪纸游戏】

题意:

给定一张 N×M 的矩形网格纸,两名玩家轮流行动。
在每一次行动中,可以任选一张矩形网格纸,沿着某一行或某一列的格线,把它剪成两部分。
首先剪出 1×1 的格纸的玩家获胜。
两名玩家都采取最优策略行动,求先手是否能获胜。

提示:开始时只有一张纸可以进行裁剪,随着游戏进行,纸张被裁剪成 2,3,… 更多张,可选择进行裁剪的纸张就会越来越多。

题解:

常规的博弈论做法,用记忆化搜索来求每个状态的后继状态的sg值,利用mex求出本状态的值
本题与常规的博弈论不同点在于,一般博弈论是一方无法操作时结束比赛,而本题是达到某一状态时结束比赛。常规来说我们要将纸裁成两部分,循环应该从1开始到n,但是本题不行,因为题目说了先剪除1 * 1的获胜,也就是说如果我们如果我们先剪除一个边为1,那么对手就可以借此剪除1 * 1,所以本题的最终状态是无论怎么操作都会剪除一个边为1,即除了1其他都不能剪除则输,所能减的范围是2,n-1,如果不能操作,则必败

for ( rg int i = 1; i <= n; ++i ){ vis [ sG ( i, c ) ^ sG ( n-i, c ) ] = true; }

本题巧妙的将最终状态进行定义,方便了代码的实现

代码:

#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#define MAXN 205
using namespace std;
typedef long long ll;int N,M;
int sg[MAXN][MAXN];int dfs(int n, int m){if(n > m) swap(n,m);if(sg[n][m]!=-1) return sg[n][m];if(n==1 && m==1) return sg[n][m] = 0;//cerr<<"dfs: "<<n<<" "<<m<<endl;int vis[MAXN];memset(vis, 0, sizeof(vis));int ans;for(int x=2;x<n-1;x++){ans = dfs(x,m)^dfs(n-x,m);vis[ans] = 1;}for(int y=2;y<m-1;y++){ans = dfs(n,y)^dfs(n,m-y);vis[ans] = 1;}for(int i=0;i<=2*M;i++){if(!vis[i]) return sg[n][m] = i;}
}int main(){memset(sg, -1, sizeof(sg));while(cin>>N>>M){if(N > M) swap(N, M);if(dfs(N,M)==0) puts("LOSE");else puts("WIN");}return 0;
}

【Acwing 219. 剪纸游戏】相关推荐

  1. 博弈论sg函数——《移旗子游戏》《剪纸游戏》

    传送门:移棋子游戏 思路:按照sg函数定义,在这道题里面,不能移动的状态就是终点态,sg值设为0,其余所有的点的sg函数值就是属于其所有后继节点的sg函数值组成的集合里面非集合元素的最小的一个数字,也 ...

  2. Acwing 1084. 数字游戏 II

    Acwing 1084. 数字游戏 II 题意: 指定一个整数闭区间 [a.b],问这个区间内有多少个取模数. 取模数:这种数字必须满足各位数字之和 mod N 为 0. 题解: 数位dp 这里不细讲 ...

  3. Acwing 1082. 数字游戏

    Acwing 1082. 数字游戏 题意: 现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数. 题解: 利用数位dp的套路来做 我们还是利用前缀和来做 我们先求1~n ...

  4. AcWing 1695. 果壳游戏

    AcWing 1695. 果壳游戏 题目链接 题目描述: 为了消磨时光,奶牛 Bessie 和她的朋友 Elsie 喜欢玩一种她们在农业展览会上看到的游戏. 游戏准备阶段,Bessie 在桌子上放置三 ...

  5. IDA* AcWing 181. 回转游戏

    IDA* AcWing 181. 回转游戏 原题链接 AcWing 181. 回转游戏 算法标签 搜索 IDA* 思路 本题采用 IDA* 算法,即迭代加深的 A* 算法. 估价函数: 统计中间8个方 ...

  6. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1185. 单词游戏:判断有向图是否存在欧拉路径、并查集

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 把每个单词看成一条边!!!首字母到尾字母的一条边,最多共有26个点(26个小写的英文字母),然后问能否把所有边串起来. 其实,对欧拉 ...

  7. 剪纸游戏(博弈论)(SG函数)

    文章目录 题目描述 解析 题目描述 解析 本题的关键就是SG函数的定义 尝试了一些自己直观上可能对但题解没有使用的约定方法(当然最后证明都是错的 ...),对SG的理解更深刻了一些 SG=0的含义是无 ...

  8. AcWing 1813. 方块游戏(暴力枚举)

    题面链接 https://www.acwing.com/problem/content/1815/ 思路 每次读入两个字符串的时候我们只需要将其中每个字母较多的一方计算入ans中即可,因为不会发生同时 ...

  9. AcWing 891. Nim游戏(nim博弈)

    题目链接 https://www.acwing.com/problem/content/893/ 思路 这个题目需要清楚一个概念: 必胜态:我们能通过一个操作使得局面变成必败态 必败态:无论如何操作都 ...

最新文章

  1. IDEA在当前类中查找方法快捷键--转
  2. 关于intel 32 hex文件格式以及hex2rom.sed
  3. 当60亿次攻击来袭,人机联合打了一场漂亮的防御战
  4. 漫步数理统计二十——多元随机变量
  5. smart client auto update
  6. Windows Server 2012 克隆修改SID
  7. 拿到offer怕查学历不敢去_《令人心动的offer》— 我们法庭见
  8. 无人车之美——论无人车辆系统的软件架构
  9. iOS中 @synthesize 和 @dynamic 区别
  10. 使用python绘制函数曲线
  11. 双十一第二波活动来了,酷客scrm助力商家大卖
  12. 服务器通过笔记本电脑联网
  13. 基于 LuCI 的开源主题 luci-them-rosy
  14. 政策更新|9月18日起,产品识别码检查升级
  15. Android studio——输入学号是否正确
  16. 现货黄金k线图分析方法有多少
  17. JAVA练习题———— 算法提高之征税程序
  18. win10蓝牙开关消失,重新安装蓝牙驱动,功能恢复。
  19. Vue vue-photo-preview插件使用
  20. 图片转成gif怎么弄?

热门文章

  1. 超好看的科学科普书,孩子大人都可以看!
  2. 细数近年来机器学习研究的几大怪现状
  3. 有计算机信号专业吗,计算机医学图像及信号处理
  4. java 1.8 vm_HotSpot虚拟机在java 1.8中的新实现
  5. php按时间分组的sql语句,(SQL语句)按指定时间段分组统计
  6. 五年级计算机下册工作计划,五年级下学期工作计划
  7. 二分法查找是基于有序_201,查找顺序查找
  8. java实用教程——组件及事件处理——处理事件
  9. 算法设计与分析——算法思想总结
  10. leetcode54. 螺旋矩阵(详解)