AlenAntonelli

Kadane, +longest subsequence

Jun 11th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     int n;
  9.     cin>>n;
  10.    
  11.     vector<int> v (n);
  12.     for (int i=0; i<n; i++)
  13.         cin>>v[i];
  14.    
  15.     vector<int> DP (n);
  16.     DP[0] = v[0];
  17.    
  18.     int ini=0, fin=0;
  19.     int m_ini=0, m_fin=0, mayor = v[0];
  20.    
  21.     for(int i=1; i<n; i++)
  22.     {
  23.         DP[i] = max( DP[i-1]+v[i], v[i] );
  24.        
  25.         if ( DP[i-1] >= 0 ) ///lo anterior que sirva (como 0), se usa
  26.             fin++;
  27.         else ini=fin=i; /// empiezo de nuevo
  28.        
  29.         if (   ( DP[i] > mayor )   ||   ( (DP[i]==mayor) && ( fin-ini > m_fin-m_ini ) )   )/// si mejoro, remplazo
  30.         {
  31.             m_ini = ini; /// para mejorar tengo que... tener un mejor numero
  32.             m_fin = fin; /// y si llegan a ser iguales, me quedo la de mayor tamaño
  33.         }
  34.        
  35.         mayor = max( DP[i], mayor ); /// guardo el mayoror
  36.     }
  37.     cout<<mayor<<"["<<m_ini<<"-"<<m_fin<<"]";
  38.  
  39.     return 0;
  40. }
  41.  
  42. /** test case
  43. 8
  44. -3 -2 -5 3 -1 -2 2 1
  45. rta: 3 [3-7]
  46.  
  47. 3
  48. 3 -3 3
  49. rta: 3 [0-2]
  50.  
  51. 5
  52. 1 2 3 -8 6
  53. rta: 3 [0-2]
  54.  
  55. 5
  56. 1 2 3 -6 6
  57. rta: 3 [0-4]
  58.  
  59. 11
  60. 2 -3 -7 -5 2 2 6 -5 -5 3 7
  61. rta: 3 [4-10]  **/
Advertisement
Add Comment
Please, Sign In to add comment