Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,109 +0,0 @@
|
|||
with Ada.Text_IO;
|
||||
with Ada.Strings.Unbounded;
|
||||
|
||||
procedure Knapsack_01 is
|
||||
package US renames Ada.Strings.Unbounded;
|
||||
|
||||
type Item is record
|
||||
Name : US.Unbounded_String;
|
||||
Weight : Positive;
|
||||
Value : Positive;
|
||||
Taken : Boolean;
|
||||
end record;
|
||||
|
||||
type Item_Array is array (Positive range <>) of Item;
|
||||
|
||||
function Total_Weight (Items : Item_Array; Untaken : Boolean := False) return Natural is
|
||||
Sum : Natural := 0;
|
||||
begin
|
||||
for I in Items'Range loop
|
||||
if Untaken or else Items (I).Taken then
|
||||
Sum := Sum + Items (I).Weight;
|
||||
end if;
|
||||
end loop;
|
||||
return Sum;
|
||||
end Total_Weight;
|
||||
|
||||
function Total_Value (Items : Item_Array; Untaken : Boolean := False) return Natural is
|
||||
Sum : Natural := 0;
|
||||
begin
|
||||
for I in Items'Range loop
|
||||
if Untaken or else Items (I).Taken then
|
||||
Sum := Sum + Items (I).Value;
|
||||
end if;
|
||||
end loop;
|
||||
return Sum;
|
||||
end Total_Value;
|
||||
|
||||
function Max (Left, Right : Natural) return Natural is
|
||||
begin
|
||||
if Right > Left then
|
||||
return Right;
|
||||
else
|
||||
return Left;
|
||||
end if;
|
||||
end Max;
|
||||
|
||||
procedure Solve_Knapsack_01 (Items : in out Item_Array;
|
||||
Weight_Limit : Positive := 400) is
|
||||
type W_Array is array (0..Items'Length, 0..Weight_Limit) of Natural;
|
||||
W : W_Array := (others => (others => 0));
|
||||
begin
|
||||
-- fill W
|
||||
for I in Items'Range loop
|
||||
for J in 1 .. Weight_Limit loop
|
||||
if Items (I).Weight > J then
|
||||
W (I, J) := W (I - 1, J);
|
||||
else
|
||||
W (I, J) := Max (W (I - 1, J),
|
||||
W (I - 1, J - Items (I).Weight) + Items (I).Value);
|
||||
end if;
|
||||
end loop;
|
||||
end loop;
|
||||
declare
|
||||
Rest : Natural := Weight_Limit;
|
||||
begin
|
||||
for I in reverse Items'Range loop
|
||||
if W (I, Rest) /= W (I - 1, Rest) then
|
||||
Items (I).Taken := True;
|
||||
Rest := Rest - Items (I).Weight;
|
||||
end if;
|
||||
end loop;
|
||||
end;
|
||||
end Solve_Knapsack_01;
|
||||
|
||||
All_Items : Item_Array :=
|
||||
( (US.To_Unbounded_String ("map"), 9, 150, False),
|
||||
(US.To_Unbounded_String ("compass"), 13, 35, False),
|
||||
(US.To_Unbounded_String ("water"), 153, 200, False),
|
||||
(US.To_Unbounded_String ("sandwich"), 50, 160, False),
|
||||
(US.To_Unbounded_String ("glucose"), 15, 60, False),
|
||||
(US.To_Unbounded_String ("tin"), 68, 45, False),
|
||||
(US.To_Unbounded_String ("banana"), 27, 60, False),
|
||||
(US.To_Unbounded_String ("apple"), 39, 40, False),
|
||||
(US.To_Unbounded_String ("cheese"), 23, 30, False),
|
||||
(US.To_Unbounded_String ("beer"), 52, 10, False),
|
||||
(US.To_Unbounded_String ("suntan cream"), 11, 70, False),
|
||||
(US.To_Unbounded_String ("camera"), 32, 30, False),
|
||||
(US.To_Unbounded_String ("t-shirt"), 24, 15, False),
|
||||
(US.To_Unbounded_String ("trousers"), 48, 10, False),
|
||||
(US.To_Unbounded_String ("umbrella"), 73, 40, False),
|
||||
(US.To_Unbounded_String ("waterproof trousers"), 42, 70, False),
|
||||
(US.To_Unbounded_String ("waterproof overclothes"), 43, 75, False),
|
||||
(US.To_Unbounded_String ("note-case"), 22, 80, False),
|
||||
(US.To_Unbounded_String ("sunglasses"), 7, 20, False),
|
||||
(US.To_Unbounded_String ("towel"), 18, 12, False),
|
||||
(US.To_Unbounded_String ("socks"), 4, 50, False),
|
||||
(US.To_Unbounded_String ("book"), 30, 10, False) );
|
||||
|
||||
begin
|
||||
Solve_Knapsack_01 (All_Items, 400);
|
||||
Ada.Text_IO.Put_Line ("Total Weight: " & Natural'Image (Total_Weight (All_Items)));
|
||||
Ada.Text_IO.Put_Line ("Total Value: " & Natural'Image (Total_Value (All_Items)));
|
||||
Ada.Text_IO.Put_Line ("Items:");
|
||||
for I in All_Items'Range loop
|
||||
if All_Items (I).Taken then
|
||||
Ada.Text_IO.Put_Line (" " & US.To_String (All_Items (I).Name));
|
||||
end if;
|
||||
end loop;
|
||||
end Knapsack_01;
|
||||
|
|
@ -34,7 +34,7 @@ pure nothrow @nogc @safe {
|
|||
solve(weight - items[idx].weight, idx - 1, v2);
|
||||
|
||||
v2.value += items[idx].value;
|
||||
v2.bits |= (1 << idx);
|
||||
v2.bits |= (1 << cast(uint) idx);
|
||||
|
||||
s = (v1.value >= v2.value) ? v1 : v2;
|
||||
}
|
||||
|
|
@ -43,7 +43,7 @@ void main() @safe {
|
|||
import std.stdio;
|
||||
|
||||
auto s = Solution(0, 0);
|
||||
solve(400, items.length - 1, s);
|
||||
solve(400, cast(int) items.length - 1, s);
|
||||
|
||||
writeln("Items:");
|
||||
int w = 0;
|
||||
|
|
|
|||
|
|
@ -1,34 +0,0 @@
|
|||
(defun ks (max-w items)
|
||||
(let ((cache (make-vector (1+ (length items)) nil)))
|
||||
(dotimes (n (1+ (length items)))
|
||||
(setf (aref cache n) (make-hash-table :test 'eql)))
|
||||
(defun ks-emb (spc items)
|
||||
(let ((slot (gethash spc (aref cache (length items)))))
|
||||
(cond
|
||||
((null items) (list 0 0 '()))
|
||||
(slot slot)
|
||||
(t (puthash spc
|
||||
(let*
|
||||
((i (car items))
|
||||
(w (nth 1 i))
|
||||
(v (nth 2 i))
|
||||
(x (ks-emb spc (cdr items))))
|
||||
(cond
|
||||
((> w spc) x)
|
||||
(t
|
||||
(let* ((y (ks-emb (- spc w) (cdr items)))
|
||||
(v (+ v (car y))))
|
||||
(cond
|
||||
((< v (car x)) x)
|
||||
(t
|
||||
(list v (+ w (nth 1 y)) (cons i (nth 2 y)))))))))
|
||||
(aref cache (length items)))))))
|
||||
(ks-emb max-w items)))
|
||||
|
||||
(ks 400
|
||||
'((map 9 150) (compass 13 35) (water 153 200) (sandwich 50 160)
|
||||
(glucose 15 60) (tin 68 45)(banana 27 60) (apple 39 40)
|
||||
(cheese 23 30) (beer 52 10) (cream 11 70) (camera 32 30)
|
||||
(T-shirt 24 15) (trousers 48 10) (umbrella 73 40)
|
||||
(waterproof-trousers 42 70) (overclothes 43 75) (notecase 22 80)
|
||||
(glasses 7 20) (towel 18 12) (socks 4 50) (book 30 10)))
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
(defun best-rate (l1 l2)
|
||||
"predicate for sorting a list of elements regarding the value/weight rate"
|
||||
(let*
|
||||
((r1 (/ (* 1.0 (nth 2 l1)) (nth 1 l1)))
|
||||
(r2 (/ (* 1.0 (nth 2 l2)) (nth 1 l2))))
|
||||
(cond
|
||||
((> r1 r2) t)
|
||||
(t nil))))
|
||||
|
||||
(defun ks1 (l max)
|
||||
"return a complete list - complete means 'less than max-weight
|
||||
but add the next element is impossible'"
|
||||
(let ((l (sort l 'best-rate)))
|
||||
(cond
|
||||
((null l) l)
|
||||
((<= (nth 1 (car l)) max)
|
||||
(cons (car l) (ks1 (cdr l) (- max (nth 1 (car l))))))
|
||||
(t (ks1 (cdr l) max)))))
|
||||
|
||||
(defun totval (lol)
|
||||
"totalize values of a list - lol is not for laughing
|
||||
but for list of list"
|
||||
(cond
|
||||
((null lol) 0)
|
||||
(t
|
||||
(+
|
||||
(nth 2 (car lol))
|
||||
(totval (cdr lol))))))
|
||||
|
||||
(defun ks (l max)
|
||||
"browse the list to find the best subset to put in the f***ing knapsack"
|
||||
(cond
|
||||
((null (cdr l)) (list (car l)))
|
||||
(t
|
||||
(let*
|
||||
((x (ks1 l max))
|
||||
(y (ks (cdr l) max)))
|
||||
(cond
|
||||
((> (totval x) (totval y)) x)
|
||||
(t y))))))
|
||||
|
||||
(ks '((map 9 150) (compass 13 35) (water 153 200) (sandwich 50 160)
|
||||
(glucose 15 60) (tin 68 45)(banana 27 60) (apple 39 40)
|
||||
(cheese 23 30) (beer 52 10) (cream 11 70) (camera 32 30)
|
||||
(T-shirt 24 15) (trousers 48 10) (umbrella 73 40)
|
||||
(waterproof-trousers 42 70) (overclothes 43 75) (notecase 22 80)
|
||||
(glasses 7 20) (towel 18 12) (socks 4 50) (book 30 10)) 400)
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
||||
<title>KNAPSACK 22 JavaScript</title> </head> <body> <noscript>Vkluch JS</noscript>
|
||||
|
||||
https://jdoodle.com/h/2Ut
|
||||
|
||||
rextester.com/BQYV50962
|
||||
|
||||
<script>
|
||||
|
||||
var n=22; G=400; a = Math.pow(2,n+1); // KNAPSACKj.js
|
||||
var dec, i, h, k, max, m, s;
|
||||
var L=[n], C=[n], j=[n], q=[a], d=[a]; e=[a];
|
||||
|
||||
document.write("<br><br># Kol Cena<br>")
|
||||
document.write("# Amo Price<br><br>")
|
||||
|
||||
L=[ 9,13,153,50,15,68,27,39,23,52,11,32,24,48,73,42,43,22,7,18,4,30 ]
|
||||
C=[ 150,35,200,160,60,45,60,40,30,10,70,30,15,10,40,70,75,80,20,12,50,10 ]
|
||||
|
||||
for (i=0; i<n; i++)
|
||||
{ // L[i]=1+Math.floor(Math.random()*3)
|
||||
// C[i]=10+Math.floor(Math.random()*9);
|
||||
j[i]=0;
|
||||
document.write( (i+1) +" "+ L[i] +" "+ C[i] +"<br>")
|
||||
}
|
||||
for (i=0; i<a; i++) { q[i]=0; d[i]=0;}
|
||||
document.write("<br>")
|
||||
|
||||
document.write("Mx Kol St-st Schifr<br>")
|
||||
document.write("Mx Amo Price Cipher<br>")
|
||||
|
||||
for (h = a-1; h>(a-1)/2; h--)
|
||||
{ dec=h; e[h]=""
|
||||
|
||||
while (dec > 0)
|
||||
{ s = Math.floor(dec % 2);
|
||||
e[h] = s + e[h]; dec = Math.floor(dec/2);
|
||||
}
|
||||
|
||||
if (e[h] == "") {e[h] = "0";}
|
||||
e[h]= e[h].substr(1, e[h].length-1);
|
||||
|
||||
for (k=0; k<n; k++)
|
||||
{ j[k] = Number(e[h].substr(k,1));
|
||||
q[h]=q[h]+j[k]*C[k];
|
||||
d[h]=d[h]+L[k]*j[k];
|
||||
}
|
||||
|
||||
// if (d[h] <= G)
|
||||
// document.write("<br>"+ G +" "+ d[h] +" "+ q[h] +" "+ e[h])
|
||||
|
||||
} document.write("<br>")
|
||||
|
||||
max=0; m=1;
|
||||
for (i=0; i<a; i++)
|
||||
{ if (d[i]<=G && q[i]>max){ max=q[i]; m=i;}
|
||||
}
|
||||
|
||||
document.write("<br>"+ d[m] +" "+ q[m] +" "+ e[m] +"<br><br>")
|
||||
|
||||
document.write("Mx St-st Schifr<br>")
|
||||
document.write("Mx Price Cipher<br><br>")
|
||||
|
||||
</script>
|
||||
|
||||
</body> </html>
|
||||
|
|
@ -1,30 +1,30 @@
|
|||
n=5; N=n+1; G=5; a=2**N # KNAPSACK 0-1 DANILIN
|
||||
L=[];C=[];e=[];j=[];q=[];s=[] # rextester.com/BCKP19591
|
||||
d=[];L=[1]*n;C=[1]*n;e=[1]*a
|
||||
j=[1]*n;q=[0]*a;s=[0]*a;d=[0]*a
|
||||
n, G = 5, 5 # KNAPSACK 0-1 DANILIN
|
||||
N = n + 1 # rextester.com/BCKP19591
|
||||
a = 2 ** N
|
||||
L, C, j, q, s, d, e = [1]*n, [1]*n, [1]*n, [0]*a, [0]*a, [0]*a, [""]*a
|
||||
|
||||
from random import randint
|
||||
for i in range(0,n):
|
||||
L[i]=randint(1,3)
|
||||
C[i]=10+randint(1,9)
|
||||
print(i+1,L[i],C[i])
|
||||
for i in range(n):
|
||||
L[i] = randint(1, 3)
|
||||
C[i] = 10+randint(1, 9)
|
||||
print(i+1, L[i], C[i])
|
||||
print()
|
||||
|
||||
for h in range(a-1,(a-1)//2,-1):
|
||||
b=str(bin(h))
|
||||
e[h]=b[3:len(b)]
|
||||
for h in range(a-1, (a-1)//2, -1):
|
||||
b = str(bin(h))
|
||||
e[h] = b[3:len(b)]
|
||||
|
||||
for k in range (n):
|
||||
j[k]=int(e[h][k])
|
||||
q[h]=q[h]+L[k]*j[k]*C[k]
|
||||
d[h]=d[h]+L[k]*j[k]
|
||||
for k in range(n):
|
||||
j[k] = int(e[h][k])
|
||||
q[h] = q[h]+L[k]*j[k]*C[k]
|
||||
d[h] = d[h]+L[k]*j[k]
|
||||
|
||||
if d[h]<= G:
|
||||
if d[h] <= G:
|
||||
print(e[h], G, d[h], q[h])
|
||||
print()
|
||||
|
||||
max=0; m=1
|
||||
max, m = 0, 1
|
||||
for i in range(a):
|
||||
if d[i]<=G and q[i]>max:
|
||||
max=q[i]; m=i
|
||||
print (d[m], q[m], e[m])
|
||||
if d[i] <= G and q[i] > max:
|
||||
max, m = q[i], i
|
||||
print(d[m], q[m], e[m])
|
||||
|
|
|
|||
|
|
@ -1,214 +0,0 @@
|
|||
' Knapsack problem/0-1 - 13/02/2017
|
||||
dim w(22),v(22),m(22)
|
||||
data=array( "map", 9, 150, "compass", 13, 35, "water", 153, 200, _
|
||||
"sandwich", 50, 160 , "glucose", 15, 60, "tin", 68, 45, _
|
||||
"banana", 27, 60, "apple", 39, 40 , "cheese", 23, 30, "beer", 52, 10, _
|
||||
"suntan cream", 11, 70, "camera", 32, 30 , "T-shirt", 24, 15, _
|
||||
"trousers", 48, 10, "umbrella", 73, 40, "book", 30, 10 , _
|
||||
"waterproof trousers", 42, 70, "waterproof overclothes", 43, 75 , _
|
||||
"note-case", 22, 80, "sunglasses", 7, 20, "towel", 18, 12, "socks", 4, 50)
|
||||
ww=400
|
||||
xw=0:iw=0:iv=0
|
||||
w(1)=iw:v(1)=iv
|
||||
for i1=0 to 1:m(1)=i1:j=0
|
||||
if i1=1 then
|
||||
iw=w(1)+data(j*3+1):iv=v(1)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i1
|
||||
if iw<=ww then
|
||||
w(2)=iw: v(2)=iv
|
||||
for i2=0 to 1:m(2)=i2:j=1
|
||||
if i2=1 then
|
||||
iw=w(2)+data(j*3+1):iv=v(2)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i2
|
||||
if iw<=ww then
|
||||
w(3)=iw: v(3)=iv
|
||||
for i3=0 to 1:m(3)=i3:j=2
|
||||
if i3=1 then
|
||||
iw=w(3)+data(j*3+1):iv=v(3)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i3
|
||||
if iw<=ww then
|
||||
w(4)=iw: v(4)=iv
|
||||
for i4=0 to 1:m(4)=i4:j=3
|
||||
if i4=1 then
|
||||
iw=w(4)+data(j*3+1):iv=v(4)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i4
|
||||
if iw<=ww then
|
||||
w(5)=iw: v(5)=iv
|
||||
for i5=0 to 1:m(5)=i5:j=4
|
||||
if i5=1 then
|
||||
iw=w(5)+data(j*3+1):iv=v(5)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i5
|
||||
if iw<=ww then
|
||||
w(6)=iw: v(6)=iv
|
||||
for i6=0 to 1:m(6)=i6:j=5
|
||||
if i6=1 then
|
||||
iw=w(6)+data(j*3+1):iv=v(6)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i6
|
||||
if iw<=ww then
|
||||
w(7)=iw: v(7)=iv
|
||||
for i7=0 to 1:m(7)=i7:j=6
|
||||
if i7=1 then
|
||||
iw=w(7)+data(j*3+1):iv=v(7)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i7
|
||||
if iw<=ww then
|
||||
w(8)=iw: v(8)=iv
|
||||
for i8=0 to 1:m(8)=i8:j=7
|
||||
if i8=1 then
|
||||
iw=w(8)+data(j*3+1):iv=v(8)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i8
|
||||
if iw<=ww then
|
||||
w(9)=iw: v(9)=iv
|
||||
for i9=0 to 1:m(9)=i9:j=8
|
||||
if i9=1 then
|
||||
iw=w(9)+data(j*3+1):iv=v(9)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i9
|
||||
if iw<=ww then
|
||||
w(10)=iw: v(10)=iv
|
||||
for i10=0 to 1:m(10)=i10:j=9
|
||||
if i10=1 then
|
||||
iw=w(10)+data(j*3+1):iv=v(10)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i10
|
||||
if iw<=ww then
|
||||
w(11)=iw: v(11)=iv
|
||||
for i11=0 to 1:m(11)=i11:j=10
|
||||
if i11=1 then
|
||||
iw=w(11)+data(j*3+1):iv=v(11)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i11
|
||||
if iw<=ww then
|
||||
w(12)=iw: v(12)=iv
|
||||
for i12=0 to 1:m(12)=i12:j=11
|
||||
if i12=1 then
|
||||
iw=w(12)+data(j*3+1):iv=v(12)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i12
|
||||
if iw<=ww then
|
||||
w(13)=iw: v(13)=iv
|
||||
for i13=0 to 1:m(13)=i13:j=12
|
||||
if i13=1 then
|
||||
iw=w(13)+data(j*3+1):iv=v(13)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i13
|
||||
if iw<=ww then
|
||||
w(14)=iw: v(14)=iv
|
||||
for i14=0 to 1:m(14)=i14:j=13
|
||||
if i14=1 then
|
||||
iw=w(14)+data(j*3+1):iv=v(14)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i14
|
||||
if iw<=ww then
|
||||
w(15)=iw: v(15)=iv
|
||||
for i15=0 to 1:m(15)=i15:j=14
|
||||
if i15=1 then
|
||||
iw=w(15)+data(j*3+1):iv=v(15)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i15
|
||||
if iw<=ww then
|
||||
w(16)=iw: v(16)=iv
|
||||
for i16=0 to 1:m(16)=i16:j=15
|
||||
if i16=1 then
|
||||
iw=w(16)+data(j*3+1):iv=v(16)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i16
|
||||
if iw<=ww then
|
||||
w(17)=iw: v(17)=iv
|
||||
for i17=0 to 1:m(17)=i17:j=16
|
||||
if i17=1 then
|
||||
iw=w(17)+data(j*3+1):iv=v(17)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i17
|
||||
if iw<=ww then
|
||||
w(18)=iw: v(18)=iv
|
||||
for i18=0 to 1:m(18)=i18:j=17
|
||||
if i18=1 then
|
||||
iw=w(18)+data(j*3+1):iv=v(18)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i18
|
||||
if iw<=ww then
|
||||
w(19)=iw: v(19)=iv
|
||||
for i19=0 to 1:m(19)=i19:j=18
|
||||
if i19=1 then
|
||||
iw=w(19)+data(j*3+1):iv=v(19)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i19
|
||||
if iw<=ww then
|
||||
w(20)=iw: v(20)=iv
|
||||
for i20=0 to 1:m(20)=i20:j=19
|
||||
if i20=1 then
|
||||
iw=w(20)+data(j*3+1):iv=v(20)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i20
|
||||
if iw<=ww then
|
||||
w(21)=iw: v(21)=iv
|
||||
for i21=0 to 1:m(21)=i21:j=20
|
||||
if i21=1 then
|
||||
iw=w(21)+data(j*3+1):iv=v(21)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i21
|
||||
if iw<=ww then
|
||||
w(22)=iw: v(22)=iv
|
||||
for i22=0 to 1:m(22)=i22:j=21
|
||||
nn=nn+1
|
||||
if i22=1 then
|
||||
iw=w(22)+data(j*3+1):iv=v(22)+data(j*3+2)
|
||||
if iv>xv and iw<=ww then xw=iw:xv=iv:l=m
|
||||
end if 'i22
|
||||
if iw<=ww then
|
||||
end if 'i22
|
||||
next:m(22)=0
|
||||
end if 'i21
|
||||
next:m(21)=0
|
||||
end if 'i20
|
||||
next:m(20)=0
|
||||
end if 'i19
|
||||
next:m(19)=0
|
||||
end if 'i18
|
||||
next:m(18)=0
|
||||
end if 'i17
|
||||
next:m(17)=0
|
||||
end if 'i16
|
||||
next:m(16)=0
|
||||
end if 'i15
|
||||
next:m(15)=0
|
||||
end if 'i14
|
||||
next:m(14)=0
|
||||
end if 'i13
|
||||
next:m(13)=0
|
||||
end if 'i12
|
||||
next:m(12)=0
|
||||
end if 'i11
|
||||
next:m(11)=0
|
||||
end if 'i10
|
||||
next:m(10)=0
|
||||
end if 'i9
|
||||
next:m(9)=0
|
||||
end if 'i8
|
||||
next:m(8)=0
|
||||
end if 'i7
|
||||
next:m(7)=0
|
||||
end if 'i6
|
||||
next:m(6)=0
|
||||
end if 'i5
|
||||
next:m(5)=0
|
||||
end if 'i4
|
||||
next:m(4)=0
|
||||
end if 'i3
|
||||
next:m(3)=0
|
||||
end if 'i2
|
||||
next:m(2)=0
|
||||
end if 'i1
|
||||
next:m(1)=0
|
||||
for i=1 to 22
|
||||
if l(i)=1 then wlist=wlist&vbCrlf&data((i-1)*3)
|
||||
next
|
||||
Msgbox mid(wlist,3)&vbCrlf&vbCrlf&"weight="&xw&vbCrlf&"value="&xv,,"Knapsack - nn="&nn
|
||||
|
|
@ -29,7 +29,6 @@ var m
|
|||
m = Fn.new { |i, w|
|
||||
if (i < 0 || w == 0) return [[], 0, 0]
|
||||
if (wants[i][1] > w) return m.call(i-1, w)
|
||||
System.write("") // guard against VM recursion bug
|
||||
var res = m.call(i-1, w)
|
||||
var i0 = res[0]
|
||||
var w0 = res[1]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue