Advertisement
Guest User

Untitled

a guest
Sep 28th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 0.96 KB | None | 0 0
  1. import java.util.stream.Collectors
  2.  
  3. def memo = new HashMap<List<Integer>, Integer>()
  4. def N = 20
  5. def input = new IntRange(false, 0, N).collect { (Math.random() * 1000).intValue() }
  6. println input
  7.  
  8. Integer m(Integer i, Integer w, List<Integer> input, Map<List<Integer>, Integer> memo) {
  9.     def key = Arrays.asList(i, w)
  10.     if (memo.containsKey(key)) {
  11.         return memo.get(key)
  12.     }
  13.  
  14.     if (i == -1) {
  15.         return 0
  16.     }
  17.  
  18.     if (input.get(i) > w) {
  19.         def value = m(i - 1, w, input, memo)
  20.         memo.put(key, value)
  21.         return value
  22.     }
  23.  
  24.     def value = Math.max(
  25.             m(i - 1, w, input, memo),
  26.             m(i - 1, w - input.get(i), input, memo) + input.get(i)
  27.     )
  28.     memo.put(key, value)
  29.     return value
  30. }
  31.  
  32. def average = input.stream().collect(Collectors.averagingInt { it }).intValue()
  33. def ref = (average * N * 3 / 4).intValue()
  34. println average
  35. println "ref: $ref"
  36. println m(input.size() - 2, ref, input, memo)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement