File tree Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Expand file tree Collapse file tree 1 file changed +77
-0
lines changed Original file line number Diff line number Diff line change
1
+ // napsack Problem
2
+ // https://www.geeksforgeeks.org/0-1-knapsack-problem-dp-10/
3
+ package napsack
4
+
5
+ // package main
6
+
7
+ import (
8
+ "fmt"
9
+ "math"
10
+ )
11
+
12
+ type item struct {
13
+ weight int
14
+ value int
15
+ }
16
+
17
+ func max (a , b int ) int {
18
+ return int (math .Max (float64 (a ), float64 (b )))
19
+ }
20
+
21
+ // display result of dp data structure
22
+ func dist (dp [][]int ) {
23
+ for i := 0 ; i < len (dp ); i ++ {
24
+ str := ""
25
+ for j := 0 ; j < len (dp [i ]); j ++ {
26
+ str = str + " " + fmt .Sprintf ("%d" , dp [i ][j ])
27
+ }
28
+ fmt .Println (str )
29
+ }
30
+ }
31
+
32
+ // solve napsack problem
33
+ func solve (maxWeight int , items []item ) [][]int {
34
+ n := len (items ) + 1
35
+ m := maxWeight + 1
36
+ // create dp data structure
37
+ dp := make ([][]int , n )
38
+ for i := range dp {
39
+ dp [i ] = make ([]int , m )
40
+ }
41
+ for i := 0 ; i < len (items ); i ++ {
42
+ for j := 0 ; j <= maxWeight ; j ++ {
43
+ if items [i ].weight > j {
44
+ dp [i + 1 ][j ] = dp [i ][j ]
45
+ } else {
46
+ dp [i + 1 ][j ] = max (dp [i ][j - items [i ].weight ]+ items [i ].value , dp [i ][j ])
47
+ }
48
+ }
49
+ }
50
+ return dp
51
+ }
52
+
53
+ // convert int slice into item slice
54
+ func baseConv (base [][]int ) []item {
55
+ var items []item
56
+ for i := 0 ; i < len (base ); i ++ {
57
+ var tmp item
58
+ tmp .weight = base [i ][0 ]
59
+ tmp .value = base [i ][1 ]
60
+ items = append (items , tmp )
61
+ }
62
+ return items
63
+ }
64
+
65
+ /*
66
+ func main() {
67
+ maxWeight := 50
68
+ base := [][]int{
69
+ {10, 60},
70
+ {20, 100},
71
+ {30, 120},
72
+ }
73
+ items := baseConv(base)
74
+ dp := solve(maxWeight, items)
75
+ dist(dp)
76
+ }
77
+ */
You can’t perform that action at this time.
0 commit comments