Submission #347010

#TimeUsernameProblemLanguageResultExecution timeMemory
347010mohamedsobhi777Mountains (IOI17_mountains)C++14
100 / 100
41 ms14208 KiB
#include "mountains.h"
#include <bits/stdc++.h>
#include <vector>

using namespace std;

const int N = 2000 + 2;

int dp[N][N];
vector<int> a;

#define pnt complex<long long>

long long cross(pnt x, pnt y)
{
       return imag(conj(x) * y);
}

long long cross(pnt x, pnt y, pnt z)
{
       return cross(y - x, z - y);
}


int maximum_deevs(std::vector<int> y)
{
       a = y;
       int n = (int)y.size();
       for (int i = 0; i < n; ++i)
       {
              dp[i][i] = 1;
              int kah = i;
              int sum = 0;
              for (int j = i - 1; j >= 0; --j)
              {
                     dp[j][i] = dp[j][i - 1];
                     if (cross(pnt(j, a[j]), pnt(kah, a[kah]), pnt(i, a[i])) >= 0 )
                     {
                            sum += dp[j + 1][kah - 1];
                            kah = j;
                     }
                     dp[j][i] = max(dp[j][i], sum + 1 + dp[j][kah - 1]);
              }
       }
       return dp[0][n - 1];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...