[USACO1.3]滑雪课程设计Ski Course Design

版权声明:转载无所谓的。。。 https://blog.csdn.net/xuxiayang/article/details/82988939

大意

给定一些数,要求选定一个数 x x ,然后改变一些数,使得所有数的范围在 x x ~ x + 17 x+17 之间,若改变一个数 x x y y 的代价为 y 2 y^2 ,求最小代价


思路

直接枚举这个 x x 即可


代码

/*
ID:hzbismy1
LANG:C++
TASK:skidesign
*/
#include<cstdio>
using namespace std;int n,a[1001],maxn,minn=50234567,ans=50234567,now;
signed main()
{
	freopen("skidesign.in","r",stdin);
	freopen("skidesign.out","w",stdout);
	scanf("%d",&n);
	for(register int i=1;i<=n;i++) scanf("%d",a+i),maxn=a[i]>maxn?a[i]:maxn,minn=a[i]<minn?a[i]:minn;
	for(register int j=minn;j<=maxn;j++)
	{
		now=0;
		for(register int i=1;i<=n;i++)
		{
			if(a[i]-j<0) now+=(a[i]-j)*(a[i]-j);//小于0了补回来
			if(a[i]-j>17) now+=(a[i]-j-17)*(a[i]-j-17);//超过17了砍掉
		}
		ans=now<ans?now:ans;
	}
	printf("%d\n",ans);
}

猜你喜欢

转载自blog.csdn.net/xuxiayang/article/details/82988939