问题描述
有 个人居住在数轴的整数位置上,第 个人的位置是 。现需要选定一个整数位置 ,使所有人移动到 并使得所有人的代价之和最小,第 个人移动的代价为 ,求最小代价。
输入格式
第一行一个整数 ,接下来一行有 个整数,表示每个人的位置。
输出格式
输出一个整数,表示最小代价。
样例输入
6
5 2 4 2 8 8
样例输出
37
解题思路
因此价值函数是关于p的函数。
为了求最小值,对求一阶导数得到唯一的极值点。而由于题目要求的p是整数。所以我们只需要检查极值点紧邻的两个整数即可。即。
然后分别令和带入到中计算即可。最后输出较小的那个结果。
#include<bits/stdc++.h>
using namespace std;
int x[105];
int main(){
int n,tot=0,t,p;
cin >> n;
for(int i = 0; i < n; i++){
cin >> t;
tot+=t;
x[i]=t;
}
p=double(tot)/double(n)+0.5;
tot=0;
for(int i = 0; i < n; i++){
tot+=(x[i]-p)*(x[i]-p);
}
cout << tot;
return 0;
}