fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define pii pair<int,int>
  5. #define pll pair<ll,ll>
  6. #define fi first
  7. #define se second
  8. #define pb push_back
  9. #define el '\n'
  10. #define task "BDARR27"
  11. const int maxN = 3e5;
  12. const int maxM = 3e3;
  13. const ll oo = 1e18 + 9;
  14. int n, k;
  15. int a[maxN+5];
  16. ll pf[maxN+5];
  17.  
  18. namespace subtask1
  19. {
  20. ll dp[maxM+5][maxM+5];
  21. void solve()
  22. {
  23. for(int i=1; i<=n; i++)
  24. for(int j=1; j<=k; j++) dp[i][j] = -oo;
  25. for(int i=1; i<=n; i++) dp[i][1] = 1LL * pf[i];
  26.  
  27.  
  28. for(int i=1; i<=n; i++)
  29. {
  30. for(int j=2; j<=k; j++)
  31. {
  32. for(int p=1; p<i; p++)
  33. {
  34. dp[i][j] = max(dp[i][j], dp[p][j-1] + 1LL*j * (pf[i] - pf[p]));
  35. }
  36. }
  37. }
  38. cout << dp[n][k];
  39. }
  40. }
  41.  
  42. namespace subtask2
  43. {
  44. bool cmp(ll x, ll y)
  45. {
  46. return x > y;
  47. }
  48.  
  49. vector<ll> vec;
  50. void solve()
  51. {
  52. memset(pf, 0, sizeof pf);
  53. for(int i=n; i>=1; i--) pf[i] = pf[i+1] + a[i];
  54. for(int i=2; i<=n; i++) vec.push_back(pf[i]);
  55. sort(vec.begin(), vec.end(), cmp);
  56. ll ans = pf[1];
  57. for(int i=0; i<k-1; i++) ans = ans + vec[i];
  58. cout << ans;
  59. }
  60. }
  61.  
  62. int main()
  63. {
  64. ios_base::sync_with_stdio(0); cin.tie(0);
  65. if(fopen(task".inp","r"))
  66. {
  67. freopen(task".inp", "r", stdin);
  68. freopen(task".out", "w", stdout);
  69. }
  70. cin >> n >> k;
  71. for(int i=1; i<=n; i++)
  72. {
  73. cin >> a[i];
  74. pf[i] = pf[i-1] + a[i];
  75. }
  76.  
  77. subtask2::solve();
  78. return 0;
  79. }
  80.  
Success #stdin #stdout 0.01s 7760KB
stdin
Standard input is empty
stdout
Standard output is empty