当前位置: 首页 > 知识库问答 >
问题:

算法:在有m张赢牌和n张输牌的纸牌游戏中实现利润最大化

易刚捷
2023-03-14

假设一个赌场(C)有一个只涉及一个玩家和一个庄家的游戏。这个游戏是用m n张牌玩的,m张牌被标记为赢牌,n张牌被标记为输牌。

游戏规则/信息:

>

  • 玩家知道每个阶段的获胜牌“m”和输牌“n”的数量。
  • 玩家开始玩“X”数量,直到所有牌都抽出。
  • 庄家非常非常聪明,有权根据玩家在牌桌上的赌注抽取一张获胜的牌或一张失败的牌。
  • 每次抽奖都会减少任何一个类别的牌的数量,即如果抽到中奖牌,则中奖牌的数量变为“m-1”,反之亦然。
  • 玩家也可以下注“0”金额。
  • 如果玩家下注“W”金额并抽出一张获胜的牌。玩家获得2W作为回报,否则他失去了下注的金额

    问题:推导出玩家应该遵循的算法或策略,以实现利润最大化。

    一些例子:

    测试用例-1:

    Lets say m=0, n=1
    

    玩家知道庄家没有机会让他输掉他下注的任何东西,所以他下注' 0 '金额。因此,他能做的最大值是x。

    测试用例 - 2:

    m=1, n=0
    

    玩家知道庄家别无选择,只能抽唯一的牌,也就是赢的牌,所以他下注一切,也就是“X”,然后得到“2X”。所以,他以2X的金额退出赌场。

    测试用例-3:

    m=1, n=1 : 
    

    假设玩家下注“W”金额 - 假设经销商抽取获胜卡:所以净金额= X W和m-

    玩家将选择“W”以最大化其利润,只有当2(X-W)=X W时才能这样做=

    因此,在这种情况下,玩家可以退出的最大数量= 4X/3

  • 共有1个答案

    孔深
    2023-03-14

    这是F#的解决方案。

    建议:除非有必要,否则不要进行符号编程。在这种情况下,我们假设 X = 1

    let stake = Array2D.zeroCreate 100 100
    let bankroll =  Array2D.zeroCreate 100 100
    
    for i in 1 .. 99 do
        stake.[0, i] <- 0.0
        bankroll.[0, i] <- 1.0
    
    for i in 1 .. 99 do
        stake.[i, 0] <- 1.0
        bankroll.[i, 0] <- 2.0
    
    stake.[0, 0] <- 0.0
    bankroll.[0, 0] <- 1.0
    
    let rec solve i j =
        if bankroll.[i, j] <> 0.0 then (stake.[i, j], bankroll.[i, j])
        else
           let a = snd (solve (i - 1) j)
           let b = snd (solve i (j - 1))
           let x = (b - a) / (a + b)  // solve (1 + x)a = (1 - x)b
           let y = (x + 1.0) * a
           stake.[i, j] <- x
           bankroll.[i, j] <- y
           (x, y)
    
    solve 10 10 // = (0.06182352702, 1.333333333)
    

    似乎只要赢牌的数量等于输牌的数量,玩家可以获得的最大利润总是4X/3

     类似资料:
    • 本文向大家介绍java实现24点纸牌游戏,包括了java实现24点纸牌游戏的使用技巧和注意事项,需要的朋友参考一下 本文题目为大家分享了java实现24点纸牌游戏的具体代码,供大家参考,具体内容如下 题目 24点游戏是经典的纸牌益智游戏。 常见游戏规则: 从扑克中每次取出4张牌。使用加减乘除,第一个能得出24者为赢。(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏

    • 我试图用Java实现纸牌游戏“Skat” 规则: 有32张卡片。每张牌在游戏中只存在一次。 颜色有:梅花、黑桃、红心、钻石 价值观是:王牌,国王,王后,杰克,十,九,八,七 那些牌被洗牌了。有三名球员 第一轮:每位玩家有3张牌。然后将两张卡片放入Skat。 第二轮:每位玩家再获赠4张牌。 第三轮:每位玩家再获得3张牌。 期望输出:每个玩家的牌都被展示(每张牌都应该存在一次) 我的产量:钻石七(32

    • 我尝试在Java实施纸牌游戏“滑冰” 规则: 有32张牌。每张牌在游戏中只存在一次。 颜色是:梅花、黑桃、红心、钻石 这些值是:王牌、国王、王后、杰克、十、九、八、七 那些牌被洗牌了。有三个队员 第一回合:每位玩家获赠3张牌。然后将2张牌放入滑板中。 第二回合:每名玩家再获4张牌。 第三回合:每名玩家再获3张牌。 想要的输出:露出的每个玩家的牌(每张牌都要存在一次) 我的输出:钻石七(32次) 我

    • 我在做一个匹配的纸牌游戏,但我不明白如何实际做到这一点。我希望有人能帮我解释一下我能做些什么来解决这个问题。 以下是规格: 在一个对的纸牌游戏中,目标是翻出对匹配的纸牌。 https://en.wikipedia.org/wiki/contension_(游戏)以下是我们考虑的配对变化的规则。 在游戏开始时,有n张牌面朝下,其中n是4的倍数。每种卡片有4张,卡片上标有字母a、b、....例如,如果

    • 我正在尝试创建一个MVC模式的回合制卡牌游戏。我对正确的设计有些怀疑。 我创建了一个由这些类组成的模型: 卡(使用套装) 套牌(40张牌,抽取牌法,剩余牌数) 表 套装(enum) 玩家(手牌,人名,手牌数,收藏牌我想) 游戏模型(引用了Deck、Table,并在构造函数中包含两个玩家) 我将在用户按下“新游戏”按钮时创建两个Player对象和GameModel(计算机和Player)。这样做对吗

    • 本文向大家介绍C语言实现纸牌计算24点小游戏,包括了C语言实现纸牌计算24点小游戏的使用技巧和注意事项,需要的朋友参考一下 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的。程序主要功能已完成,目前还有部分细节未处理,待完成ing...对于代码中的错误,恳请批评指正。 游戏描述:   A-10:分别代表数字 1-10