fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. using ll = long long;
  5.  
  6. int main() {
  7. ios::sync_with_stdio(false);
  8. cin.tie(nullptr);
  9.  
  10. int n;
  11. cin >> n;
  12.  
  13. vector<ll> arr(n + 1);
  14. for (int i = 1; i <= n; ++i) {
  15. cin >> arr[i];
  16. }
  17.  
  18. const ll INF = (ll)4e18;
  19. const int MAX_SUM = 100;
  20.  
  21. vector<vector<ll>> dp(n + 1, vector<ll>(MAX_SUM + 1, INF));
  22.  
  23. dp[0][0] = 0;
  24.  
  25. for (int right = 1; right <= n; ++right) {
  26. ll segmentSum = 0;
  27.  
  28. for (int left = right; left >= 1; --left) {
  29. segmentSum += arr[left];
  30.  
  31. int len = right - left;
  32.  
  33. for (int prevSum = 0; prevSum <= segmentSum; ++prevSum) {
  34. if (dp[left - 1][prevSum] == INF)
  35. continue;
  36.  
  37. dp[right][segmentSum] =
  38. min(dp[right][segmentSum],
  39. dp[left - 1][prevSum] + len);
  40. }
  41. }
  42. }
  43.  
  44. ll result = INF;
  45.  
  46. for (int s = 1; s <= MAX_SUM; ++s) {
  47. result = min(result, dp[n][s]);
  48. }
  49.  
  50. cout << result << '\n';
  51.  
  52. return 0;
  53. }
Success #stdin #stdout 0s 5312KB
stdin
5
2 4 1 6 12
stdout
1