fork download
  1. n=5; N=n+1; G=5; a=2**N # N=7: L=5: a = 2^(N+1): 'knapsack.bas DANILIN
  2. L=[];C=[];e=[];j=[];q=[];s=[] # Dim L(N), C(N), j(N), q(a), q$(a), d(a)
  3. d=[];L=[1]*n;C=[1]*n;e=[1]*a # KNAPSACK 0-1 DANILIN
  4. j=[1]*n;q=[0]*a;s=[0]*a;d=[0]*a
  5.  
  6. from random import randint # Randomize Timer
  7. for i in range(0,n): # For i=1 To N
  8. L[i]=randint(1,3) # L(i)=Int(Rnd*3+1)
  9. C[i]=10+randint(1,9) # C(i)=10+Int(Rnd*9)
  10. print(i+1,L[i],C[i]) # Print i, L(i), C(i): Next
  11. print()
  12.  
  13. for h in range(a-1,(a-1)//2,-1): # For m=a-1 To (a-1)/2 Step -1: g=m: Do
  14. b=str(bin(h)) # q$(m)=LTrim$(Str$(g Mod 2))+q$(m): g=g\2: Loop Until g=0
  15. e[h]=b[3:len(b)] # q$(m)=Mid$(q$(m), 2, Len(q$(m))): Next
  16.  
  17. for k in range (n): # For k=1 To N:
  18. j[k]=int(e[h][k]) # j(k)=Val(Mid$(q$(h), k, 1)) ' from chifer
  19. q[h]=q[h]+L[k]*j[k]*C[k] # q(h)=q(h)+L(k)*j(k)*C(k) ' 0 or 1
  20. d[h]=d[h]+L[k]*j[k] # d(h)=d(h)+L(k)*j(k): Next
  21.  
  22. if d[h]<= G: # If d(h) <= L Then
  23. print(e[h], G, d[h],q[h]) # Print #1, d(h), q(h), q$(h): Next
  24. print()
  25.  
  26. max=0; m=1 # max=0: m=1:
  27. for i in range(a): # For i=1 To a
  28. if d[i]<=G and q[i]>max: # If d(i)<=L Then If q(i) > max
  29. max=q[i]; m=i # Then max=q(i): m=i: Next
  30. print (d[m], q[m], e[m]) # Print #1,: Print #1, d(m), q(m), q$(m): End
  31.  
  32.  
Success #stdin #stdout 0.07s 14352KB
stdin
Standard input is empty
stdout
1 3 11
2 3 19
3 1 17
4 3 11
5 2 11

10100 5 4 50
10001 5 5 55
10000 5 3 33
01100 5 4 74
01001 5 5 79
01000 5 3 57
00110 5 4 50
00101 5 3 39
00100 5 1 17
00011 5 5 55
00010 5 3 33
00001 5 2 22
00000 5 0 0

5 79 01001