每一个可以移动的棋子都要移动——Every-SG 游戏
先看一个问题
HDU 3595 GG and MM (Every_SG博弈)
题目有N个游戏同时进行,每个游戏有两堆石子,每次从个数多的堆中取走数量小的数量的整数倍的石子。取最后一次的获胜。并且N个游戏同时进行,除非游戏结束,否则必须操作。
现在问题变成了,每次都必须在每个非空石子堆中选择。
这个问题的核心在于:
对于我们可以赢的单一游戏,我们一定要拿到这一场游戏的胜利!
所以,我们只需要考虑如何让我们必胜的游戏尽可能长的玩下去。
但是对手却不希望他必败的单一游戏玩的太久,这就是 Every-SG 游 戏不同于其他 SG 游戏的地方:一般的 SG 游戏只有胜与负之间的博弈, 而 Every-SG 游戏又添加了长与短之间的博弈,这使得 Every-SG 游戏更 有嚼头,更有味道。

最后的定理是显然的,最大的单一游戏步数如果是奇数的话那么肯定是先手取得进行最后一步。否则一定是对手取走最后一个棋子。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 1010 int dp[N][N]; int dfs(int p,int q)
{
if(p>q) swap(p,q);
if(p==)
{
dp[p][q] = ;
return ;//必败
}
int k = q/p;
int tp = q-p*k,tq = p;
int flag = dfs(q-p*k,p);
if(k==)
{
dp[p][q] = dp[tp][tq]+;
return flag^;
}
else
{
if(flag == )
{
dp[p][q] = dp[tp][tq]+;
}
else dp[p][q] = dp[tp][tq]+;
return ;
}
} int main() {
int n;
memset(dp,-,sizeof(dp));
while(cin>>n)
{
int mx = -;
for(int i=;i<n;i++)
{
int p,q;
cin>>p>>q;
dfs(p,q); mx = max( mx,dp[min(p,q)][max(p,q)] );
}
if( (mx&) ) printf("MM\n");
else printf("GG\n");
}
return ;
}
hdu3595
每一个可以移动的棋子都要移动——Every-SG 游戏的更多相关文章
- m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法
package com.study; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...
- 对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。
这段时间折腾了哈java web应用的压力测试,部署容器是tomcat 7.期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘.对web应用开发者来说,我们很关 ...
- 对每一个IO操作的返回都要进行判断
对每一个IO操作的返回都要进行判断 我们业务代码中有很多进行mysql.redis.文件.curl等的io操作,对每一个io操作我们都要对其返回值进行判断,然后做对应的处理,加日志信息或者抛出异常状态 ...
- python基础练习题(题目 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少)
day13 --------------------------------------------------------------- 实例021:猴子偷桃 题目 猴子吃桃问题:猴子第一天摘下若干 ...
- 都闪开,不用任何游戏引擎,html也能开发格斗游戏
html格斗游戏,对打游戏 不用引擎,不用画布canvas,不用任何库(包括jquery), 原生div+img组件,开发格斗游戏游戏教程视频已经上传 b站:https://www.bilibili. ...
- 关于类、方法、对象(实例):通过一个例子看一下self都做了哪些事情
我们在定义一个类时,经常会在类的各个方法中看到self,那么在程序执行时self到底起了什么作用,什么时候要加self,这一点需要我们思考并好好理解.之前在学习时没有想这么多,加之用pycharm写代 ...
- 酒店订房系统:如何使用mysql来确定一个时间段内的房间都是可订的
需要解决的问题: 假设一个用户选择了日期范围来进行订房,例如:2014-04-25至2014-04-30 ,那么现在问题就出现,你必须要确认在这个时间段内某个房间是否都是有房间的,如果没有那么当然不能 ...
- 编写自定义PE结构的程序(如何手写一个PE,高级编译器都是编译好的PE头部,例如MASM,TASM等,NASM,FASM是低级编译器.可以自定义结构)
正在学PE结构...感谢个位大哥的文章和资料...这里先说声谢谢 一般高级编译器都是编译好的PE头部,例如MASM,TASM等一直都说NASM,FASM是低级编译器.可以自定义结构但是苦于无人发布相关 ...
- 求一个String 类型数组是不是都是回文,是返回1,否则返回-1
package 回文; public class yhisHuiWen { public static void ishuiwen(String arr[]){ boolean flag=true;/ ...
随机推荐
- HDU 4707:Pet
Pet Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- c# 客户端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- c# ReaderWriterLock类
先前也知道,Monitor实现的是在读写两种情况的临界区中只可以让一个线程访问,那么如果业务中存在”读取密集型“操作,就 好比数据库一样,读取的操作永远比写入的操作多.针对这种情况,我们使用Monit ...
- ural 1104,暴力取模
题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1104 题目大意:输入一个字符串(数字与大写字母组成),输出n,n满足此字符串为n进制时, ...
- oneThink安装出错解决
在Wampserver3.0.0(apache2.4.17+php5.6.15+mysql5.7.9)版本中oneThink安装用1.1github版,不要用1.1开发版,不然安装的时候数据库导入时b ...
- hnu Counting ones 统计1-n 二进制中1的个数
Counting ones Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users ...
- 2016 ACM/ICPC Asia Regional Qingdao Online HDU5882
链接:http://acm.hdu.edu.cn/showproblem.php?pid=5882 解法:一个点必须出度和入度相同就满足题意,所以加上本身就是判断奇偶性 #include<std ...
- Mysql-学习笔记(==》集合函数与分组四)
-- 聚集函数 配合分组语句 group by-- 显示最高分SELECT MAX(sscore) FROM db.`student`;-- 显示最高分学生的信息min maxSELECT * FRO ...
- 2016年11月30日 星期三 --出埃及记 Exodus 20:21
2016年11月30日 星期三 --出埃及记 Exodus 20:21 The people remained at a distance, while Moses approached the th ...
- ①创建项目testpackage ②在pack2.B中添加方法f ③在类A中添加如下三个成员变量:int型的私有变量i float型的变量f double型的公有变量d 在pack1.B的main方法中为对象a的成员变量f和d分别赋值为2和3 在pack2.C的main方法中为对象a的成员变量d赋值为3
package pack1; public class A { private int i; float f; public double d; public float getF() { retur ...