fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef pair<int, int> ii;
  6.  
  7. const int INF = 1e9;
  8. const ll LINF = 1e18;
  9.  
  10. template<typename T>
  11. void maximize(T& a, const T& b) {
  12. if (b < a) return;
  13. a = b;
  14. }
  15.  
  16. const int N = 1e5 + 5;
  17.  
  18. int n;
  19. int a[N];
  20.  
  21. ll dp[N][2]; // dp[i][0/1] = Tổng lớn nhất đạt được khi xét đến vị trí thứ i, và có/không sử dụng thao tác lên vị trí thứ i
  22.  
  23. int main() {
  24. ios::sync_with_stdio(0); cin.tie(0);
  25. cin >> n;
  26. for (int i = 1; i <= n; i++) cin >> a[i];
  27.  
  28. for (int i = 0; i <= n; i++) {
  29. for (int j = 0; j <= 1; j++) dp[i][j] = -LINF;
  30. }
  31.  
  32. dp[0][0] = 0;
  33. for (int i = 1; i <= n; i++) {
  34. for (int j = 0; j <= 1; j++) {
  35. for (int prev_j = 0; prev_j <= 1; prev_j++) {
  36. int sign = ((j ^ prev_j) ? -1 : 1);
  37. maximize(dp[i][j], dp[i - 1][prev_j] + sign * a[i]);
  38. }
  39. }
  40. }
  41.  
  42. cout << dp[n][0] << '\n';
  43. }
Success #stdin #stdout 0.01s 5280KB
stdin
3
-10 5 -4
stdout
19