首页 > 其他分享 >博弈论模板问题

博弈论模板问题

时间:2024-11-09 21:31:58浏览次数:1  
标签:int 博弈论 问题 Fibonacci 1005 include 那契 模板 getSG

1.HDU 1848

任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F(n-2)(n>=3); 所以,1,2,3,5,8,13……就是菲波那契数列。 在HDOJ上有不少相关的题目,比如1005 Fibonacci again就是曾经的浙江省赛题。

今天,又一个关于Fibonacci的题目出现了,它是一个小游戏,定义如下:

1、 这是一个二人游戏;

2、 一共有3堆石子,数量分别是m, n, p个;

3、 两人轮流走;

4、 每走一步可以选择任意一堆石子,然后取走f个;

5、 f只能是菲波那契数列中的元素(即每次只能取1,2,3,5,8…等数量);

6、 最先取光所有石子的人为胜者; 假设双方都使用最优策略,请判断先手的人会赢还是后手的人会赢。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int f[20], SG[1005], mex[1005];
int getSG(int n) {
    SG[0] = 0;//必败态
    for (int i = 1; i <= n; i ++) {
        memset(mex, 0, sizeof(mex));
        for (int j = 1; f[j] <= i; j ++)
            mex[SG[i - f[j]]] = 1;//对i节点的每个后继进行mex运算,类似于一种标记,1代表出现过 
        for (int j = 0; ; j ++)
            if (!mex[j]) {//j是在i的后继中没有出现最小非负整数 
                SG[i] = j;
                break;
            } 
    }
    return SG[n];
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    f[1] = 1, f[2] = 2;
    for (int i = 3; i <= 16; i ++)
        f[i] = f[i - 1] + f[i - 2];
    int n, m, p;
    while (cin >> n >> m >> p) {
        if (n == 0 && m == 0 && p == 0) break;
        if (getSG(n) ^ getSG(m) ^ getSG(p)) cout << "Fibo" << '\n';
        else cout << "Nacci" << '\n';
    }
    return 0;
}

 

标签:int,博弈论,问题,Fibonacci,1005,include,那契,模板,getSG
From: https://www.cnblogs.com/love-lzt/p/18537323

相关文章

  • 校园网页设计成品 学校班级网页制作模板 dreamweaver网页作业 简单网页课程成品 大学
    ......
  • 博弈论
    定义必胜或必胜状态:仅仅考虑当前的状态,不考虑的操作人时,一定必胜或必输\(a\oplusb\):\(a,b\)在二进制下,对位取反。Nim游戏考虑有\(n\)堆石子,两个人轮流来拿走棋子(至少拿一个),拿到最后剩下的一颗棋子的人获胜。结论:定义Nim和\(=a_1\oplusa_2\oplusa_3\oplus\dots......
  • 面试:一个关于try-catch的问题,我面试失败了……
    今天,咱们来聊一个相对轻松的话题。前段时间,我的一个朋友在面试时被面试官批评了。因为他在准备面试的时候,一直在准备一些比较复杂的系统面试题和原理问题。结果,面试官突然问了一个简单的问题:try-catch应该写在for循环里面还是外面?并说明理由。一时间,我朋友都没搞清楚......
  • 反汇编命令学习以及分析越界和空指针问题
    1,反汇编命令行(1)move语法格式:movdestination,source例如:moveax,0x1;将立即数1复制到eax寄存器。立即数到寄存器mov[ebx],eax;将eax寄存器的值复制到ebx寄存器指向的内存地址,寄存器到内存moveax,ebx ;将ebx寄存器的值复制到eax,寄存器到寄存器moveax,[ebp-4]......
  • 为什么凸问题的解集是凸集
    ......
  • (Lin的实施运维笔记06)解决Tomcat服务器在控制台窗口中的乱码问题
    产生乱码的根本原因就是编码和解码不一致,比较常见的编码格式有Unicode、ASCll码、GBK、UTF-8等,Tomcat控制台的乱码问题只需要把日志配置文件中的UTF-8格式改成GBK格式就行解决方法:1、找到Tomcat的安装目录下conf文件夹2、打开conf文件夹中的logging.properties文件,并搜索找......
  • 化粪池(septic tank)的起源可以追溯到19世纪末20世纪初。当时,随着城市化进程的推进,越来
    化粪池(septictank)的起源可以追溯到19世纪末20世纪初。当时,随着城市化进程的推进,越来越多的城市和乡村开始面临卫生设施和污水处理的问题。为了有效处理家庭和社区的排泄物和污水,出现了化粪池这种简单而有效的排污设施。化粪池的设计原理是通过自然的沉淀和分解作用,分离并处理生......
  • List接口相关问题
    目录1.迭代器Iterator是什么2.Iterator怎么使用?有什么特点?3.如何边遍历边移除Collection中的元素?4.Iterator和ListIterator有什么区别?5.遍历一个List有哪些不同的方式?每种方法的实现原理是什么?Java中List遍历的最佳实践是什么?6.RandomAccess6.1什么是Random......
  • QT中大量数据存储至excel的问题解决
            因为这个问题困扰了我很久,所以在这里记录一下,顺便给可能会遇到类似问题的人提供一点帮助。        在qt中,如果用C++处理数据保存到excel,正常来说在pro文件中添加axcontainer 然后就能够调用到excel,但是这只能适用于数量级没那么大时的需求。  ......
  • 在很多游戏问题中规划算法表现的要比强化学习算法还好,那么为什么还要研究RL
    根据前段时间分享的对一些游戏,如《俄罗斯方块》、《贪吃蛇》、《2048》游戏上来看,可以知道一个精调好的规划算法(启发式算法),在人为给定的一些预设条件下运行,其最终的算法性能会比一般的RL算法实现的效果要好,但是为什么我们还要研究RL算法呢,那么是不是说明RL算法这种AI算法就没有太......