/* VR370108 TRIPLETTEBIG */ #include #include #include #include #include #include using namespace std; int N; const int IMPOSS = INT_MAX; const int MAX_N = 10000; int opt[MAX_N][MAX_N/3]; int vect[MAX_N]; int main(){ FILE *in; in = fopen("input.txt", "r"); assert(in); //int N; int fsf = fscanf(in, "%d", &N); fsf++; for(int i = 0; i < N; i++){ int j; fsf = fscanf(in, "%d", &j); vect[i] = j; } fclose(in); sort(vect, vect+N); int i, k; int t = N/3; int minindex = -2; for(k = 0; k <= t; k++){ for(i = 0; i <= minindex+2; i++) opt[i][k] = IMPOSS; for(i = minindex+2; i < N; i++){ if(k == 0) opt[i][k] = 0; else if (2*k > i+1) opt[i][k] = IMPOSS; else{ opt[i][k] = opt[i-1][k]; if((i >= 2) && opt[i-2][k-1] != IMPOSS){ opt[i][k] = min( opt[i][k], opt[i-2][k-1] + (vect[i]-vect[i-1])*(vect[i]-vect[i-1])); if(opt[i-1][k]>opt[i][k]) minindex = i-1; } } } } FILE* output; output = fopen("output.txt", "w"); fprintf(output, "%d", opt[N-1][t]); fclose(output); return 0; }