Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.37 KB | None | 0 0
  1. from timeit import default_timer as timer
  2.  
  3. # Konačno rješenje pomoću dynamic programming-a
  4. # Program za 0-1 knapsack problem
  5. # Isto kao i prethodni program vraća maksimalnu vrijednost
  6. # koja se može staviti u knapsack kapaciteta T
  7. def knapSack(T, tp, val, n):
  8.     K = [[0 for x in range(T + 1)] for x in range(n + 1)]
  9.  
  10.     # Popunjava tablicu bottom-up redoslijedom
  11.     for i in range(n + 1):
  12.         for j in range(T + 1):
  13.             if i == 0 or j == 0:
  14.                 K[i][j] = 0
  15.             elif tp[i - 1] <= j:
  16.                 K[i][j] = max(val[i - 1] + K[i - 1][j - tp[i - 1]], K[i - 1][j])
  17.             else:
  18.                 K[i][j] = K[i - 1][j]
  19.  
  20.     return K[n][T]
  21.  
  22.  
  23. # kraj knapSack funkcije
  24.  
  25.  
  26. # Testiranje gornje funkcije
  27. # val - niz vrijednosti predmeta
  28. # tp - težina predmeta
  29. # T - maksimalna težina, odnosno kapacitet knapsack-a
  30. # n - količina predmeta
  31. """val = [60, 100, 120, 150, 210, 250, 300, 310, 320, 340]
  32. tp = [10, 20, 30, 40, 40, 50, 55, 60, 70, 90]
  33. T = 500
  34. n = len(val)
  35.  
  36. start = timer()
  37. print('Maksimalna vrijednost koju mozes ukrasti je: ')
  38. print(knapSack(T, tp, val, n))
  39.  
  40. end = timer()
  41. print(end - start)"""
  42.  
  43.  
  44. val = []
  45. tp = []
  46.  
  47. print('Vi ste lopov te ste provalili u kucu. Cilj vam je ukrasti sto vise, no limitira vas velicina vaseg ruksaka, a ne vrijedi svaki predmet isto.')
  48. print('Prvo sto trebate napraviti je unijeti kapacitet vaseg ruksaka.')
  49.  
  50. T = int(input('Unesi kapacitet knapsacka: '))
  51.  
  52. print('S obzirom da si limitiran velicinom ruksaka, postoji mogucnost da neces moci ukrasti sve predmete, ')
  53. print('stoga ti je cilj ukrasti sto vecu vrijednost u predmetima, a da pritom oni stanu u tvoj ruksak.')
  54. print('Sada kada znamo koliko da je kapacitet vaseg ruksaka %d, unesi u program vrijednosti i tezine predmeta koje mozes ukrast.'%T)
  55.  
  56. #unos vrijednosti i tezina predmeta
  57. #unos se prekida kada se unese 0 kao vrijednost i tezina predmeta
  58. i=0
  59. while 1:
  60.     i += 1
  61.     value = int(input('Unesi vrijednost predmeta %d.: '%i))
  62.     weight = int(input('Unesi tezinu predmeta %d.: '%i))
  63.     if value == 0 and weight == 0:
  64.          break
  65.     val.append(value)
  66.     tp.append(weight)
  67.  
  68. n = len(val)
  69.  
  70. #ispis vrijednosti predmeta
  71. print(val)
  72.  
  73. #ispis tezina predmeta
  74. print(tp)
  75.  
  76.  
  77. start = timer()
  78. print('Maksimalna vrijednost koju mozes ukrasti je: ')
  79. print(knapSack(T, tp, val, n))
  80.  
  81. end = timer()
  82. print(end - start)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement