24 lines
754 B
Text
24 lines
754 B
Text
Open "knapsack.txt" For Output As #1
|
|
N=7: L=5: a = 2^(N+1): Randomize Timer 'knapsack.bas DANILIN
|
|
Dim L(N), C(N), j(N), q(a), q$(a), d(a)
|
|
|
|
For m=a-1 To (a-1)/2 Step -1: g=m: Do ' cipher 0-1
|
|
q$(m)=LTrim$(Str$(g Mod 2))+q$(m)
|
|
g=g\2: Loop Until g=0
|
|
q$(m)=Mid$(q$(m), 2, Len(q$(m)))
|
|
Next
|
|
|
|
For i=1 To N: L(i)=Int(Rnd*3+1) ' mass & cost
|
|
C(i)=10+Int(Rnd*9): Print #1, i, L(i), C(i): Next ' origin
|
|
|
|
For h=a-1 To (a-1)/2 Step -1
|
|
For k=1 To N: j(k)=Val(Mid$(q$(h), k, 1)) ' j() = cipher
|
|
q(h)=q(h)+L(k)*j(k)*C(k) ' 0 or 1
|
|
d(h)=d(h)+L(k)*j(k)
|
|
Next
|
|
If d(h) <= L Then Print #1, d(h), q(h), q$(h)
|
|
Next
|
|
max=0: m=1: For i=1 To a
|
|
If d(i)<=L Then If q(i) > max Then max=q(i): m=i
|
|
Next
|
|
Print #1,: Print #1, d(m), q(m), q$(m): End
|