题解 P3650 【[USACO1.3]滑雪课程设计Ski Course Design】
这题思路很清晰,暴力出奇迹
我就再说一下枚举的细节吧:
-找出上下界限
-以界限为界判断高低,若高于则全部削去,低于则削去差大于17的部分
上代码:
#include<bits/stdc++.h>
using namespace std;
int a[100000],n,minn,s=1e9+1,sum;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);//找出最大和最小情况,这里用sort只是我强行偷懒
for(int j=a[1];j<=a[n];j++)
{
sum=0;
for(int i=1;i<=n;i++)
{
if(a[i]-j>17) sum+=(a[i]-j-17)*(a[i]-j-17); //若高于则全部削去,低于则削去差大于17的部分
if(a[i]<j) sum+=(a[i]-j)*(a[i]-j);
}
s=min(sum,s); //维护结果
}
cout<<s;
}