Advertisement
Guest User

Untitled

a guest
Aug 14th, 2023
645
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.92 KB | None | 0 0
  1. # optimized O(N) solution
  2. def sol(nums):
  3.     ret = 0
  4.     ma = 0
  5.     n = len(nums)
  6.     nums.reverse()
  7.     for i,el in enumerate(nums):
  8.         if i != n - 1:
  9.             ma = max(ma, el)
  10.             ret += ma
  11.     return ret
  12.  
  13. # slower O(N^2) dp solution for testing
  14. from functools import lru_cache
  15. def dp(nums):
  16.     n = len(nums)
  17.  
  18.     @lru_cache(None)
  19.     def dfs(i):
  20.         if i == 0:
  21.             return 0
  22.         else:
  23.             score = ret = 0
  24.             for j in range(i - 1, -1, -1):
  25.                 score += nums[i]
  26.                 ret = max(ret, score + dfs(j))
  27.             return ret
  28.  
  29.     return dfs(n - 1)
  30.  
  31. # randomized tests
  32. N = 100
  33. L = 400
  34. V = 100
  35. from random import randint
  36. for _ in range(N):
  37.     l = randint(1, L)
  38.     a = [randint(1, V) for _ in range(l)]
  39.  
  40.     actual = dp(a)
  41.     mine = sol(a)
  42.  
  43.     if mine != actual:
  44.         print(a)
  45.         print(mine, actual)
  46.         break
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement