fork download
  1. n, k = map(int, input().split())
  2. a = list(map(int, input().split()))
  3.  
  4.  
  5. pref = [0] * (n + 1)
  6. for i, x in enumerate(a):
  7. pref[i + 1] = pref[i] + x
  8.  
  9. V = sorted({pref[j] - pref[i] for i in range(n) for j in range(i + 1, n + 1)})
  10.  
  11.  
  12. def check(L, U):
  13. dp = [-1] * (n + 1)
  14. dp[0] = 0
  15. for i in range(1, n + 1):
  16. for j in range(i):
  17. if dp[j] != -1 and L <= pref[i] - pref[j] <= U:
  18. dp[i] = max(dp[i], dp[j] + 1)
  19. return dp[n] >= k
  20.  
  21.  
  22. ans = float('inf')
  23. left = 0
  24. for right in range(len(V)):
  25. while check(V[left], V[right]):
  26. ans = min(ans, V[right] - V[left])
  27. left += 1
  28. if left > right:
  29. break
  30.  
  31. print(ans)
  32.  
Success #stdin #stdout 0.07s 14156KB
stdin
6 3
7 4 6 1 2 10
stdout
2