guanhuaming 发表于 2010-5-18 10:39:11

谢谢056254628 的解答,能否把程序共享一下?俺苦于不会编程啊。

感激不尽。

056254628 发表于 2010-5-18 13:46:05

我是用VB语言的,给你不适用。
由于函数F(R,G,B)中B是不限范围的,很难用倒推的方法推出F(30,70,1)的值。
正推的话,如何处理F函数的重复计算,关系到程序的速度。
我的想法是记录F函数的使用情况,若使用过的就记录下来,下次求该值直接从该处找。

guanhuaming 发表于 2010-5-18 13:55:18

兄弟,你就把vb代码发给俺学习一下吧?好吗?

056254628 发表于 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
-----------------------------------------------------
此程序还没经过优化,计算稍大的数,速度很慢。

guanhuaming 发表于 2010-5-18 21:08:06

谢谢,我在我电脑上运行看看。

056254628 发表于 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   的最小正整数

056254628 发表于 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$ 的最小正整数
页: 1 2 [3]
查看完整版本: 一个有趣的博弈策略