/* 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; for(k = 0; k <= t; k++) for(i = 0; i <= N; i++) if(k == 0 ) opt[i][k] = 0; else if( 2*k > i) 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])); } FILE* output; output = fopen("output.txt", "w"); fprintf(output, "%d", opt[N][t]); fclose(output); return 0; }