whenzl 发表于 2005-9-17 23:17

租赁问题穷举法源程序

<P><BR>上面是附件,用表2做的</P>
<P>然后是VB做的程序</P>
<P>Dim Per(1000, 8) As Byte '每人的前8个需求<BR>Dim sP(1000, 3) As Byte     '每人选择的3个<BR>Dim shun(56, 3) As Byte<BR>Dim M(100) As Integer   '每类光盘剩余量<BR>Dim oM(100) As Integer  '光盘需要量<BR>Dim p As Long<BR>Dim du, Realdu As Long<BR>Dim Sav(1000, 3) As Byte</P>
<P>Public Sub ReadFile()<BR>    Dim ts As Long<BR>    Dim Tmp As String<BR>    ts = FreeFile(0)<BR>    Open App.Path + "\output.txt" For Input As ts<BR>        p = 1<BR>        While Not EOF(ts)<BR>            Line Input #ts, Tmp<BR>            For i = 1 To 7<BR>                Per(p, i) = Val(Mid(Tmp, 1, InStr(Tmp, Chr(9))))<BR>                Tmp = Mid(Tmp, InStr(Tmp, Chr(9)) + 1)<BR>            Next<BR>            If InStr(Tmp, Chr(9)) Then<BR>                Tmp = Mid(Tmp, 1, InStr(Tmp, Chr(9)))<BR>            End If<BR>            Per(p, 8) = Val(Tmp)<BR>            p = p + 1<BR>        Wend<BR>    Close ts<BR>    Open App.Path + "\m.txt" For Input As ts<BR>        Line Input #ts, Tmp<BR>        For i = 1 To 99<BR>            M(i) = Val(Mid(Tmp, 1, InStr(Tmp, Chr(9))))<BR>            Tmp = Mid(Tmp, InStr(Tmp, Chr(9)) + 1)<BR>        Next<BR>        M(100) = Val(Tmp)<BR>End Sub</P>
<P>Public Sub Init()<BR>        shun(1, 1) = 1<BR>        shun(1, 2) = 2<BR>        shun(1, 3) = 3<BR>        shun(2, 1) = 1<BR>        shun(2, 2) = 2<BR>        shun(2, 3) = 4<BR>        shun(3, 1) = 1<BR>        shun(3, 2) = 2<BR>        shun(3, 3) = 5<BR>        shun(4, 1) = 1<BR>        shun(4, 2) = 2<BR>        shun(4, 3) = 6<BR>        shun(5, 1) = 1<BR>        shun(5, 2) = 2<BR>        shun(5, 3) = 7<BR>        shun(6, 1) = 1<BR>        shun(6, 2) = 2<BR>        shun(6, 3) = 8<BR>        shun(7, 1) = 1<BR>        shun(7, 2) = 3<BR>        shun(7, 3) = 4<BR>        shun(8, 1) = 1<BR>        shun(8, 2) = 3<BR>        shun(8, 3) = 5<BR>        shun(9, 1) = 1<BR>        shun(9, 2) = 3<BR>        shun(9, 3) = 6<BR>        shun(10, 1) = 1<BR>        shun(10, 2) = 3<BR>        shun(10, 3) = 7<BR>        shun(11, 1) = 1<BR>        shun(11, 2) = 3<BR>        shun(11, 3) = 8<BR>        shun(12, 1) = 1<BR>        shun(12, 2) = 4<BR>        shun(12, 3) = 5<BR>        shun(13, 1) = 1<BR>        shun(13, 2) = 4<BR>        shun(13, 3) = 6<BR>        shun(14, 1) = 1<BR>        shun(14, 2) = 4<BR>        shun(14, 3) = 7<BR>        shun(15, 1) = 1<BR>        shun(15, 2) = 4<BR>        shun(15, 3) = 8<BR>        shun(16, 1) = 1<BR>        shun(16, 2) = 5<BR>        shun(16, 3) = 6<BR>        shun(17, 1) = 1<BR>        shun(17, 2) = 5<BR>        shun(17, 3) = 7<BR>        shun(18, 1) = 1<BR>        shun(18, 2) = 5<BR>        shun(18, 3) = 8<BR>        shun(19, 1) = 1<BR>        shun(19, 2) = 6<BR>        shun(19, 3) = 7<BR>        shun(20, 1) = 1<BR>        shun(20, 2) = 6<BR>        shun(20, 3) = 8<BR>        shun(21, 1) = 1<BR>        shun(21, 2) = 7<BR>        shun(21, 3) = 8<BR>        shun(22, 1) = 2<BR>        shun(22, 2) = 3<BR>        shun(22, 3) = 4<BR>        shun(23, 1) = 2<BR>        shun(23, 2) = 3<BR>        shun(23, 3) = 5<BR>        shun(24, 1) = 2<BR>        shun(24, 2) = 3<BR>        shun(24, 3) = 6<BR>        shun(25, 1) = 2<BR>        shun(25, 2) = 3<BR>        shun(25, 3) = 7<BR>        shun(26, 1) = 2<BR>        shun(26, 2) = 3<BR>        shun(26, 3) = 8<BR>        shun(27, 1) = 2<BR>        shun(27, 2) = 4<BR>        shun(27, 3) = 5<BR>        shun(28, 1) = 2<BR>        shun(28, 2) = 4<BR>        shun(28, 3) = 6<BR>        shun(29, 1) = 2<BR>        shun(29, 2) = 4<BR>        shun(29, 3) = 7<BR>        shun(30, 1) = 2<BR>        shun(30, 2) = 4<BR>        shun(30, 3) = 8<BR>        shun(31, 1) = 2<BR>        shun(31, 2) = 5<BR>        shun(31, 3) = 6<BR>        shun(32, 1) = 2<BR>        shun(32, 2) = 5<BR>        shun(32, 3) = 7<BR>        shun(33, 1) = 2<BR>        shun(33, 2) = 5<BR>        shun(33, 3) = 8<BR>        shun(34, 1) = 2<BR>        shun(34, 2) = 6<BR>        shun(34, 3) = 7<BR>        shun(35, 1) = 2<BR>        shun(35, 2) = 6<BR>        shun(35, 3) = 8<BR>        shun(36, 1) = 2<BR>        shun(36, 2) = 7<BR>        shun(36, 3) = 8<BR>        shun(37, 1) = 3<BR>        shun(37, 2) = 4<BR>        shun(37, 3) = 5<BR>        shun(38, 1) = 3<BR>        shun(38, 2) = 4<BR>        shun(38, 3) = 6<BR>        shun(39, 1) = 3<BR>        shun(39, 2) = 4<BR>        shun(39, 3) = 7<BR>        shun(40, 1) = 3<BR>        shun(40, 2) = 4<BR>        shun(40, 3) = 8<BR>        shun(41, 1) = 3<BR>        shun(41, 2) = 5<BR>        shun(41, 3) = 6<BR>        shun(42, 1) = 3<BR>        shun(42, 2) = 5<BR>        shun(42, 3) = 7<BR>        shun(43, 1) = 3<BR>        shun(43, 2) = 5<BR>        shun(43, 3) = 8<BR>        shun(44, 1) = 3<BR>        shun(44, 2) = 6<BR>        shun(44, 3) = 7<BR>        shun(45, 1) = 3<BR>        shun(45, 2) = 6<BR>        shun(45, 3) = 8<BR>        shun(46, 1) = 3<BR>        shun(46, 2) = 7<BR>        shun(46, 3) = 8<BR>        shun(47, 1) = 4<BR>        shun(47, 2) = 5<BR>        shun(47, 3) = 6<BR>        shun(48, 1) = 4<BR>        shun(48, 2) = 5<BR>        shun(48, 3) = 7<BR>        shun(49, 1) = 4<BR>        shun(49, 2) = 5<BR>        shun(49, 3) = 8<BR>        shun(50, 1) = 4<BR>        shun(50, 2) = 6<BR>        shun(50, 3) = 7<BR>        shun(51, 1) = 4<BR>        shun(51, 2) = 6<BR>        shun(51, 3) = 8<BR>        shun(52, 1) = 4<BR>        shun(52, 2) = 7<BR>        shun(52, 3) = 8<BR>        shun(53, 1) = 5<BR>        shun(53, 2) = 6<BR>        shun(53, 3) = 7<BR>        shun(54, 1) = 5<BR>        shun(54, 2) = 6<BR>        shun(54, 3) = 8<BR>        shun(55, 1) = 5<BR>        shun(55, 2) = 7<BR>        shun(55, 3) = 8<BR>        shun(56, 1) = 6<BR>        shun(56, 2) = 7<BR>        shun(56, 3) = 8<BR>        <BR>        Realdu = -999999<BR>End Sub</P>
<P>Public Sub First(p As Long) '设置为第一个<BR>    sP(p, 1) = 1<BR>    sP(p, 2) = 2<BR>    sP(p, 3) = 3<BR>End Sub</P>
<P>Public Function Last(p As Long) As Boolean  '设置为第二个<BR>    If sP(p, 1) = 6 And sP(p, 2) = 7 And sP(p, 3) = 8 Then<BR>            Last = True<BR>    Else<BR>            Last = False<BR>    End If<BR>End Function</P>
<P>Public Sub nxt(p As Long)   '指向下一个<BR>    For i = 1 To 56<BR>        If sP(p, 1) = shun(i, 1) And sP(p, 2) = shun(i, 2) And sP(p, 3) = shun(i, 3) Then<BR>                sP(p, 1) = shun((i Mod 56) + 1, 1)<BR>                sP(p, 2) = shun((i Mod 56) + 1, 1)<BR>                sP(p, 3) = shun((i Mod 56) + 1, 1)<BR>                Exit Sub<BR>        End If<BR>    Next<BR>End Sub</P>
<P>Public Sub JiSuan()     '计算满意度<BR>    For i = 1 To 100<BR>        oM(i) = 0<BR>    Next<BR>    For i = 1 To 1000<BR>        oM(Per(i, sP(i, 1))) = oM(Per(i, sP(i, 1))) + 1<BR>        oM(Per(i, sP(i, 2))) = oM(Per(i, sP(i, 2))) + 1<BR>        oM(Per(i, sP(i, 3))) = oM(Per(i, sP(i, 3))) + 1<BR>    Next<BR>    For i = 1 To 100<BR>        If M(i) &lt; oM(i) Then<BR>            Exit Sub<BR>        End If<BR>    Next<BR>    du = 0<BR>    For i = 1 To 1000<BR>        du = du - sP(i, 1) - sP(i, 2) - sP(i, 3)<BR>    Next<BR>    If du &gt; Realdu Then<BR>        Save<BR>        For i = 1 To 1000<BR>            Tmp = Tmp + Sav(i, 1) + " " + Sav(i, 2) + " " + Sav(i, 3) + vbCrLf<BR>        Next<BR>        tOutput = Tmp<BR>        DoEvents<BR>    End If<BR>End Sub</P>
<P>Public Sub Save()       '保存<BR>    For i = 1 To 1000<BR>        Sav(i, 1) = Per(i, sP(i, 1))<BR>        Sav(i, 2) = Per(i, sP(i, 2))<BR>        Sav(i, 3) = Per(i, sP(i, 3))<BR>    Next<BR>End Sub</P>
<P>Private Sub cStart_Click()<BR>        Dim Jin As Long<BR>        Jin = 0<BR>        Init<BR>        ReadFile<BR>        For i = 1 To 1000<BR>            sP(i, 1) = 1<BR>            sP(i, 2) = 2<BR>            sP(i, 3) = 3<BR>        Next<BR>        <BR>        Do<BR>                Jin = Jin + 1<BR>                lTip = Trim(Jin)<BR>                DoEvents<BR>                p = 1000<BR>                JiSuan<BR>                nxt (p)<BR>                While Last(p) Or p = 0<BR>                    First (p)<BR>                    p = p - 1<BR>                    nxt (p)<BR>                Wend<BR>        Loop While p &lt;&gt; 0<BR>        <BR>        Tmp = ""<BR>        For i = 1 To 1000<BR>            Tmp = Tmp + Sav(i, 1) + " " + Sav(i, 2) + " " + Sav(i, 3) + vbCrLf<BR>        Next<BR>        tOutput = Tmp<BR>End Sub</P>

tony1979 发表于 2005-9-19 19:08

谢谢啊

pzwjn 发表于 2005-9-19 19:12

<P>怎么没见A题有讨论的呢?</P>

whenzl 发表于 2005-9-17 23:18

不过实现可能性不大,只能做为一个失败假设了

snowland 发表于 2005-9-18 01:52

没把握发上来,还要钱啊??

翘翘鞋 发表于 2005-9-18 03:40

<P>发给我我看看呀</P>

feelwindy 发表于 2005-9-18 08:52

<P>气死我了</P>

feelwindy 发表于 2005-9-18 08:54

<P>大家不要看</P>
<P>没什么意思</P>
<P>我还被他骗了一个金币</P>

vancy 发表于 2005-9-20 11:24

还差一毛钱行不行啊。

dapengcai 发表于 2005-9-23 18:01

回复:(whenzl)租赁问题穷举法源程序

1111111111111111111111111111111111111111111
页: [1] 2
查看完整版本: 租赁问题穷举法源程序