#include <bits/stdc++.h>
using namespace std;
#define il inline
#define INF 0x3f3f3f3f
#define cl(a, b) memset(a, b, sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
int n, now, ans = INF;
#define N 1000
int a[N];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
//sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (a[i] + 17 < a[j]) now += (a[j] - a[i] - 17) * (a[j] - a[i] - 17);
if (a[i] > a[j]) now += (a[i] - a[j]) * (a[i] - a[j]);
}
ans = min(ans, now);
now = 0;
}
printf("%d\n", ans);
return 0;
}
你在解决的时候不能只考虑最低点在不在 a[i] 中挑选,如果这样就会WA 3 4 两个点
#include <bits/stdc++.h>
using namespace std;
#define il inline
#define INF 0x3f3f3f3f
#define cl(a, b) memset(a, b, sizeof(a))
typedef long long ll;
typedef unsigned long long ull;
int n, now, ans = INF;
#define N 1000
int a[N];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
sort(a + 1, a + n + 1);
for (int i = a[i]; i <= a[n]; i++)
{
for (int j = 1; j <= n; j++)
{
if (a[j] + 17 < i) now += (i-a[j] - 17) * (i-a[j] - 17);
if (a[j] > i) now += (a[j]-i) * (a[j]-i);
}
ans = min(ans, now);
now = 0;
}
printf("%d\n", ans);
return 0;
}