fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3.  
  4. using namespace std;
  5.  
  6. const int MOD = 1e9 + 7;
  7. const int maxN = 1e5 + 2, maxK = 450;
  8. int dp[maxN][maxK];
  9. int pre[maxN], a[maxN];
  10.  
  11. void solve(){
  12. int n;
  13. cin >> n;
  14. pre[0] = 0;
  15. for(int i = 1; i <= n; i++){
  16. cin >> a[i];
  17. pre[i] = pre[i- 1] + a[i];
  18. }
  19. int max_pos = 0;
  20. while(max_pos * (max_pos + 1) / 2 <= n)max_pos++;
  21.  
  22. for(int i = 1; i <= max_pos; i++){
  23. dp[n + 1][i] = LLONG_MIN;
  24. }
  25. dp[n + 1][0] = LLONG_MAX;
  26.  
  27. for(int i = n; i > 0; i--){
  28. for(int j = 0; j <= max_pos; j++){
  29. dp[i][j] = dp[i + 1][j];
  30. if(j && i + j - 1 <= n && pre[i + j - 1] - pre[i - 1] < dp[i + j][j - 1]){
  31. dp[i][j] = max(dp[i][j], pre[i + j - 1] - pre[i - 1]);
  32. }
  33. }
  34. }
  35. int ans = 0;
  36. for(int j= 1; j <= max_pos; j++){
  37. if(dp[1][j] > 0)ans = j;
  38. }
  39. cout << ans << "\n";
  40. }
  41.  
  42. int32_t main(){
  43. ios_base::sync_with_stdio(false);
  44. cin.tie(nullptr);
  45.  
  46. int t = 1;
  47. cin >> t;
  48.  
  49. for(int i = 1; i <= t; i++){
  50. solve();
  51. }
  52. return 0;
  53. }
Success #stdin #stdout 0.01s 5632KB
stdin
5
1
1
3
1 2 3
5
1 1 2 2 3
7
1 2 1 1 3 2 6
5
9 6 7 9 7
stdout
1
1
2
3
1