MeShootIn

Максимальная сумма на подотрезке

Apr 8th, 2019
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.77 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. /*
  6. 8
  7. 2 3 -8 -1 2 4 -2 3
  8.           --------
  9. 7
  10. */
  11.  
  12. int main(){
  13.     int n;
  14.     cin >> n;
  15.    
  16.     // Массив чисел
  17.     int * arr = new int[n];
  18.     for(int i = 0; i != n; ++i){
  19.         cin >> arr[i];
  20.     }
  21.    
  22.     // Матрица для динамики
  23.     int ** dp = new int * [n];
  24.     for(int i = 0; i != n; ++i){
  25.         dp[i] = new int[2];
  26.     }
  27.    
  28.     // Динамика
  29.     dp[0][1] = arr[0];
  30.     dp[0][0] = 0;
  31.     for(int i = 1; i != n; ++i){
  32.         dp[i][1] = max(arr[i], arr[i] + dp[i - 1][1]);
  33.         dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);
  34.     }
  35.    
  36.     // Ответ
  37.     cout << max(dp[n - 1][0], dp[n - 1][1]);
  38.    
  39.     // Очистка памяти
  40.     delete [] arr;
  41.     for(int i = 0; i != n; ++i){
  42.         delete [] dp[i];
  43.     }
  44.     delete [] dp;
  45.    
  46.     system("PAUSE");
  47.     return 0;
  48. }
Advertisement
Add Comment
Please, Sign In to add comment