租赁问题穷举法源程序
<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) < 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 > 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 <> 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> 谢谢啊 <P>怎么没见A题有讨论的呢?</P> 不过实现可能性不大,只能做为一个失败假设了 没把握发上来,还要钱啊?? <P>发给我我看看呀</P> <P>气死我了</P> <P>大家不要看</P>
<P>没什么意思</P>
<P>我还被他骗了一个金币</P> 还差一毛钱行不行啊。
回复:(whenzl)租赁问题穷举法源程序
1111111111111111111111111111111111111111111
页:
[1]
2