func_code_string: #include<cstdio>   #include<iomanip>   #include<iostream>   #include<cstring>   #include<string>   #include<cmath>   #include<map>   #include<algorithm>   #include<vector>   #include<set>   #include<queue>   #include<unordered_map>   #define Quick ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)   #define ll long long   #define P pair<int,int>   #define inf 0x3f3f3f3f   #define endl   n    #define PI acos(-1)   #define mem(a, b) memset(a, b, sizeof a)   using namespace std;   const int N =2007;   const int mod = 1e9 + 7;   ll a[N];   ll dp[N][N];   int main()   {       Quick;          //重新排序使其在每一位上的（max-min）总和最小          int n; cin >> n;       for (int i = 0; i < n; i++)cin >> a[i];       sort(a, a + n);       for (int i = 0; i < n; i++) {           for (int j = 0; j < n; j++) {               dp[i][j] = 1e12;//初始dp数组保留最大值。           }       }       //初始化dp数组。       dp[0][0] = a[n - 1] - a[0];       //减小这个差值，可以删掉一个最小的或者最大的       for (int i = 1; i < n; i++)       {           //只删除最大值i次           dp[i][0] = dp[i - 1][0] + a[n - i - 1] - a[0]; //删除最大值从右边删除，那么删除之后当前最大值就是a[n-i-1];           //只删除最小值i次           dp[0][i] = dp[0][i - 1] + a[n - 1] - a[i];     //删除最小值从左边删除，那么删除之后当前最小值就是a[i]。       }          //接下来开始进行状态转移取最优。       for (int i = 1; i < n; i++) {           for (int j = 1; i + j < n; j++) {               //i+j不得超过n次。               dp[i][j] = min(dp[i][j], dp[i - 1][j] + a[n - i - 1] - a[j]);//选择删除最大值               dp[i][j] = min(dp[i][j], dp[i][j - 1] + a[n - i - 1] - a[j]);//选择删除最小值           }       }       ll res = 1e12;       for (int i = 0; i < n; i++) {           res = min(res, dp[i][n - i - 1]);       }       cout << res << endl;   }