Skip to content

Commit 738e970

Browse files
authored
A simple knapsack implementation in dana (#61)
1 parent b2ca5c3 commit 738e970

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

dana/programs/knapsack.dana

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
def main
2+
3+
def knapsack is int: n as int, w_max as int, p as int[], w as int[]
4+
5+
var dp is int [10000]
6+
var i w_c is int
7+
8+
w_c := 0
9+
loop:
10+
if w_c > w_max : break
11+
dp[w_c] := 0
12+
w_c := w_c + 1
13+
14+
i := 0;
15+
loop:
16+
if i >= n: break
17+
w_c := w_max
18+
loop:
19+
if w_c <= 0: break
20+
if w[i] <= w_c and p[i] + dp[w_c-w[i]] > dp[w_c]:
21+
dp[w_c] := p[i] + dp[w_c - w[i]]
22+
w_c := w_c - 1
23+
i := i + 1
24+
return: dp[w_max]
25+
26+
var n weight_max res i is int
27+
var profit weight is int[10000]
28+
29+
n := readInteger()
30+
weight_max := readInteger()
31+
32+
if n <= 0: return
33+
34+
i := 0
35+
loop:
36+
if i >= n: break
37+
profit[i] := readInteger()
38+
i := i + 1
39+
40+
i := 0
41+
loop:
42+
if i >= n: break
43+
weight[i] := readInteger()
44+
i := i + 1
45+
46+
res := knapsack: n, weight_max, profit, weight
47+
48+
writeInteger: res
49+
writeChar: "\n"
50+

dana/programs/knapsack.input

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../alan/programs/knapsack.input

dana/programs/knapsack.result

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../alan/programs/knapsack.result

0 commit comments

Comments
 (0)