62 lines
1.9 KiB
Plaintext
62 lines
1.9 KiB
Plaintext
#define PesoMax 400
|
|
#define items 22
|
|
#define Tabu Chr(9)
|
|
|
|
Type Knapsack
|
|
articulo As String*22
|
|
peso As Integer
|
|
valor As Integer
|
|
pieza As Integer
|
|
End Type
|
|
Dim item(1 To 22) As Knapsack => { _
|
|
("map ", 9, 150, 0), ("compass ", 13, 35, 0), _
|
|
("water ", 153, 200, 0), ("sandwich ", 50, 160, 0), _
|
|
("glucose ", 15, 60, 0), ("tin ", 68, 45, 0), _
|
|
("banana ", 27, 60, 0), ("apple ", 39, 40, 0), _
|
|
("cheese ", 23, 30, 0), ("beer ", 52, 10, 0), _
|
|
("suntan cream ", 11, 70, 0), ("camera ", 32, 30, 0), _
|
|
("T-shirt ", 24, 15, 0), ("trousers ", 48, 10, 0), _
|
|
("umbrella ", 73, 40, 0), ("waterproof trousers ", 42, 70, 0), _
|
|
("waterproof overclothes", 43, 75, 0), ("note-case ", 22, 80, 0), _
|
|
("sunglasses ", 7, 20, 0), ("towel ", 18, 12, 0), _
|
|
("socks ", 4, 50, 0), ("book ", 30, 10, 0)}
|
|
|
|
Dim As Integer i, tot = 0, TValor = 0
|
|
For i =1 To Ubound(item)
|
|
tot += item(i).peso
|
|
Next i
|
|
|
|
Dim As Integer TPeso = tot-PesoMax
|
|
Dim As String pr = ""
|
|
Dim As Integer c = 0, v, w, k
|
|
|
|
Do
|
|
v = 1e9 : w = 0 : k = 0
|
|
|
|
For i = 1 To items
|
|
If item(i).pieza = 0 Then
|
|
w = 1000 * item(i).valor / item(i).peso
|
|
If w < v Then v = w : k = i
|
|
End If
|
|
Next i
|
|
|
|
If k Then
|
|
TPeso -= item(k).peso
|
|
item(k).pieza = 1
|
|
If TPeso <= 0 Then Exit Do
|
|
End If
|
|
c += 1
|
|
Loop Until c>= items
|
|
|
|
Print "Knapsack contents: "
|
|
For i = 1 To items
|
|
If item(i).pieza = 0 Then
|
|
Print item(i).articulo & Tabu & item(i).peso & Tabu & item(i).valor
|
|
TValor += item(i).valor
|
|
End If
|
|
Next i
|
|
|
|
Print !"\nTotal value: "; TValor
|
|
Print "Total weight: "; PesoMax + TPeso
|
|
Sleep
|