找回密码
 欢迎注册
楼主: guanhuaming

[讨论] 一个有趣的博弈策略

[复制链接]
 楼主| 发表于 2010-5-18 10:39:11 | 显示全部楼层
谢谢056254628 的解答,能否把程序共享一下?俺苦于不会编程啊。

感激不尽。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-18 13:46:05 | 显示全部楼层
我是用VB语言的,给你不适用。
由于函数F(R,G,B)中B是不限范围的,很难用倒推的方法推出F(30,70,1)的值。
正推的话,如何处理F函数的重复计算,关系到程序的速度。
我的想法是记录F函数的使用情况,若使用过的就记录下来,下次求该值直接从该处找。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-18 13:55:18 | 显示全部楼层
兄弟,你就把vb代码发给俺学习一下吧?好吗?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-18 20:57:56 | 显示全部楼层
本帖最后由 056254628 于 2010-5-18 21:23 编辑

Private Function f(ByVal R As Long, ByVal G As Long, ByVal B As Long) As String
Dim temp As Long
Dim k As Long
Dim str1 As String
Dim temp2 As Long
Dim Jieguo As Long

Jieguo=0
If G = 0 Then
        If B <= 0 Then
            f = 1
        Else
            temp = 2 ^ R - 1
            If B Mod temp = 0 Then
                f = B / temp
            Else
                f = B \ temp + 1
            End If
        End If
ElseIf R = 0 Then
        If B <= -1 * G Then
            f = G
        Else
            f = "∞"
        End If
Else
        k = 1
        Do
            str1 = f(R - 1, G, B - k)
            If str1 = "∞" Then
                k = k + 1
            Else
                temp = f(R, G - 1, B + k) + k
                temp2 = CLng(str1) - k
                If temp >= temp2 Then
                    If Jieguo = 0 Then
                        Jieguo = temp
                    Else
                        If temp < Jieguo Then
                            Jieguo = temp
                        End If
                    End If
                    f = Jieguo
                    Exit Function
                Else
                    Jieguo = temp2
                    k = k + 1
                End If
            End If
        Loop While True
End If
End Function
-----------------------------------------------------
此程序还没经过优化,计算稍大的数,速度很慢。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-18 21:08:06 | 显示全部楼层
谢谢,我在我电脑上运行看看。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-18 21:58:27 | 显示全部楼层
我觉得递推公式可以简化到如下:
      当R、G都大于0时
      F(R,G,B)=F(R,G-1,B+k)+k                              k取满足  F(R,G-1,B+k)+k >= F(R-1,G,B-k)-k   的最小正整数
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-18 22:30:53 | 显示全部楼层
当R=1 时,由于 F(R-1,G,B-k)有时 会涉及到无解的问题,
所以将递推公式,写成如下:
      $F(R,0,B)=Ceil(B/(2^R-1)) $                     Ceil(X) 表示不小于X的最小整数。
      $F(1,G,B)=(2^(G+1)-1)*B+(G-1)*2^(G+1)+2$
          $ F(R,G,B)=F(R,G-1,B+k)+k $                k取 满足$F(R,G-1,B+k)+k >= F(R-1,G,B-k)-k$ 的最小正整数
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-3 03:28 , Processed in 0.042381 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表