Advertisement
GerONSo

Untitled

Dec 3rd, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.55 KB | None | 0 0
  1. /*
  2. ┓┏┓┏┓┃
  3. ┛┗┛┗┛┃
  4. ┓┏┓┏┓┃
  5. ┛┗┛┗┛┃
  6. ┓┏┓┏┓┃\○/
  7. ┛┗┛┗┛┃ / /
  8. ┓┏┓┏┓┃ノ
  9. ┛┗┛┗┛┃
  10. ┓┏┓┏┓┃
  11. ┛┗┛┗┛┃
  12. ┓┏┓┏┓┃
  13. ┛┗┛┗┛┃
  14. ┓┏┓┏┓┃
  15. ┛┗┛┗┛┃
  16. ┓┏┓┏┓┃┓
  17. ┛┗┛┗┛┃┃
  18. */
  19.  
  20. // #define pragma
  21.  
  22. #ifdef pragma
  23. #pragma GCC optimize("Ofast")
  24. #pragma GCC optimize("no-stack-protector")
  25. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  26. #pragma GCC optimize("unroll-loops")
  27. #pragma GCC diagnostic ignored "-Wunused-result"
  28. #endif // pragma
  29.  
  30. #include<bits/stdc++.h>
  31. #include <ext/pb_ds/assoc_container.hpp>
  32. #include <ext/pb_ds/tree_policy.hpp>
  33.  
  34. #define ll long long
  35. #define all(x) begin(x), end(x)
  36. #define pb push_back
  37. #define x first
  38. #define y second
  39. #define int long long
  40. #define zero(x) memset(x, 0, sizeof(x))
  41.  
  42. using namespace std;
  43. using namespace __gnu_pbds;
  44.  
  45.  
  46. typedef vector<int> vi;
  47. typedef vector<bool> vb;
  48. typedef pair<int, int> pii;
  49. typedef long double ld;
  50. typedef vector<vi> matrix;
  51. typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
  52.  
  53. const ld PI = atan2(0, -1);
  54.  
  55. void seriy() {
  56. ios::sync_with_stdio(0);
  57. cin.tie(0);
  58. cout.tie(0);
  59. cout << fixed << setprecision(10);
  60. #if 1
  61. freopen("input", "r", stdin);
  62. freopen("output", "w", stdout);
  63. #endif
  64. }
  65.  
  66. const int INF = 1e9 + 7;
  67.  
  68. signed main() {
  69. seriy();
  70. int n;
  71. cin >> n;
  72. vi a(n + 1);
  73. for(int i = 1; i <= n; i++) {
  74. cin >> a[i];
  75. }
  76. int k;
  77. cin >> k;
  78. int dp[k + 2][n + 1];
  79. zero(dp);
  80. int sm = 0;
  81. for(int i = 1; i <= n; i++) {
  82. sm += a[i];
  83. dp[1][i] = sm;
  84. }
  85. for(int i = 2; i <= k; i++) {
  86. for(int j = i; j <= n; j++) {
  87. int mn = INF;
  88. vi mx(n + 2);
  89. for(int m = 1; m < j; m++) {
  90. mx[m] = max(mx[m - 1], dp[i - 1][m]);
  91. }
  92. int sum = a[j];
  93. for(int m = j - 1; m >= 1; m--) {
  94. // cerr << i << " " << j << " " << mx[m] << " " << sum << '\n';
  95. mn = min(mn, max(mx[m], sum));
  96. sum += a[m];
  97. }
  98. dp[i][j] = mn;
  99. }
  100. }
  101. // cerr << '\n';
  102. // for(int i = 1; i <= k; i++) {
  103. // for(int j = 1; j <= n; j++) {
  104. // cerr << dp[i][j] << " ";
  105. // }
  106. // cerr << '\n';
  107. // }
  108. cout << dp[k][n];
  109. return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement