Submission #755583

#TimeUsernameProblemLanguageResultExecution timeMemory
755583ETheBest3Mountains (IOI17_mountains)C++17
100 / 100
37 ms23016 KiB
#include "mountains.h"
#define lli long long
#define endl "\n"
#include <vector>
const lli MAXN=2005;
using namespace std;
lli dp[MAXN][MAXN], N, ss, last;
struct points{
    lli x, y;
};
points p[MAXN];
bool ccw(points a, points b, points c){
    return (a.x*b.y+a.y*c.x+b.x*c.y)-(c.x*b.y+c.y*a.x+b.x*a.y)>=0;
}
int maximum_deevs(std::vector<int> y) {
    N=y.size();
    for(lli i=0; i<N; i++){
        p[i]={i, y[i]};
    }
    for(lli i=0; i<N; i++)dp[i][i]=1;
    for(lli r=0; r<N; r++){
        last=r;
        ss=0;
        for(lli l=r-1; l>=0; l--){
            dp[l][r]=dp[l][r-1];
            if(ccw(p[l], p[last], p[r])){
                ss+=dp[l+1][last-1];
                last=l;
            }
            dp[l][r]=max(dp[l][r], 1+ss+dp[l][last-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...