数据量很小,可以对$100$内每一对$l$和$r$进行枚举,并且$r-l=17$,我们对每座山峰修改,保证其高度在$[l,r]$区间内,,然后找出使得花费最小的一对l、r对应的花费即可。
#include <bits/stdc++.h>
using namespace std;
int o(int x) { return x * x; }
int a[1010];
int main() {
int n; scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
int ans = 0x3f3f3f3f;
for(int i = 1; i <= 83; i++) {
int t = 0, l = i, r = i + 17;
for(int j = 1; j <= n; j++) {
if(a[j] < l) t += o(a[j] - l);
else if(a[j] > r) t += o(a[j] - r);
}
ans = min(ans, t);
}
printf("%d\n", ans);
return 0;
}
你这个错了,如果a[i]全是0的话,结果为n
emmm……谢谢指正,我再想想!
for(int i = 1; i <= 83; i++)
这里的i = 1应改成i = 0