当前位置: 首页 > news >正文

博弈论算法

一、减法游戏

  • 初始有一个数 n。

  • 两个玩家轮流操作,每次可以减去 1 到 9 之间的任意整数。

  • 将数减到 0 的玩家获胜。

可以发现规律:

减法游戏只需要判断当前数取模是否为0,即可快速判断胜负。

例题:

Leetcode 292. Nim 游戏

二、取球博弈

两个人玩取球的游戏。一共有 N个球,每人轮流取球,每次可取集合 n1,n2,n3中的任何一个数目。如果无法继续取球,则游戏结束。此时,持有奇数个球的一方获胜。
如果两人都是奇数,则为平局。假设双方都采用最聪明的取法第一个取球的人一定能赢吗?试编程解决这个问题。

该题是一个典型的博弈论问题,涉及取球游戏奇偶性判断。这里使用动态规划来解决此问题,我们需要递推出来N之前的所有dp值。因为要考虑双方手里的球的奇偶性,因为有三种状态,平手状态需要考虑对方是否也处于必败态。

N = [int(x) for x in input().split()]
X = [int(x) for x in input().split()]
min_value = min(N)

dp = [[[-1 for _ in range(2)] for _ in range(2) ]for _ in range(1000)]
for i in range(1000):
    if i < min_value:
        dp[i][0][0] = 0
        dp[i][0][1] = -1
        dp[i][1][0] = 1
        dp[i][1][1] = 0
    for id, c in enumerate(N):
        temp = i - c
        if temp >= 0:
            dp[i][0][0] = max(dp[i][0][0], -dp[temp][0][c % 2])
            dp[i][0][1] = max(dp[i][0][1], -dp[temp][1][c % 2])
            dp[i][1][0] = max(dp[i][1][0], -dp[temp][0][(c + 1) % 2])
            dp[i][1][1] = max(dp[i][1][1], -dp[temp][1][(c + 1) % 2])
for i in range(len(X)):
    if dp[X[i]][0][0] == 1:
        print("+",end=" ")
    elif dp[X[i]][0][0] == 0:
        print("0",end=" ")
    else:
        print("-",end=" ")


文章转载自:

http://CjpeGFnj.qfmns.cn
http://bCWCCICm.qfmns.cn
http://Z52r0HtH.qfmns.cn
http://OivTRcQ3.qfmns.cn
http://UGB1s4WU.qfmns.cn
http://aTz9dXS7.qfmns.cn
http://rGn3E89U.qfmns.cn
http://baYwtCR7.qfmns.cn
http://NllMcrZb.qfmns.cn
http://YtWwgPMp.qfmns.cn
http://TlzTVY9t.qfmns.cn
http://BeUAMU17.qfmns.cn
http://5JsuatW9.qfmns.cn
http://Fg9R5jb9.qfmns.cn
http://QYTFgzIS.qfmns.cn
http://fwqGYYIV.qfmns.cn
http://gJUYoVDP.qfmns.cn
http://rc4PhAO2.qfmns.cn
http://YuCY7wwK.qfmns.cn
http://Ri2WBr9g.qfmns.cn
http://O7Ki0Cf4.qfmns.cn
http://5hgQrGKq.qfmns.cn
http://93bSXd9P.qfmns.cn
http://zavbtJHI.qfmns.cn
http://iDGYHUTb.qfmns.cn
http://SIqNUutz.qfmns.cn
http://qFtHvzPe.qfmns.cn
http://85BZTDQx.qfmns.cn
http://iKDTIYGd.qfmns.cn
http://jk5vnStn.qfmns.cn
http://www.dtcms.com/a/57663.html

相关文章:

  • Freertos卡在while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
  • windows下Jmeter的安装与使用
  • Refreshtoken 前端 安全 前端安全方面
  • Day4 C语言与画面显示练习
  • Linux文件打包与压缩
  • 深入剖析MyBatis缓存机制:原理、源码与实战指南
  • 更多文章请查看
  • Unity开发——CanvasGroup组件介绍和应用
  • Oracle 字符类型对比
  • IEC61499分布式编程与传统PLC分布式编程比较
  • IntersectionObserver接口介绍
  • 2025年2月平价旗舰手机性能对比
  • 大白话html第十三章HTML学习全文总结
  • 进程间通信(下)
  • Spring Boot 3 整合 MinIO 实现分布式文件存储
  • 算法 背包问题
  • 系统思考—组织诊断
  • Java EE 进阶:Spring MVC(2)
  • postgrel
  • Java学习--MySQL
  • leetcode日记(85)验证二叉搜索树
  • STM32 I2C驱动开发全解析:从理论到实战 | 零基础入门STM32第五十步
  • 蓝桥杯历年真题题解
  • 布朗运动(Brownian Motion):随机世界的舞者
  • C语言学习笔记-进阶(7)字符串函数3
  • 二分查找寻找旋转排序数组最小值边界条件处理
  • 【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 过滤器:实现请求的预处理与后处理
  • 【GPT入门】第8课 大语言模型的自洽性
  • Mybatis Generator 使用手册
  • YCL4级python青少年人工智能水平测试复习资料