寒假打卡——AcWing1353. 滑雪场设计
2021-01-25
1353. 滑雪场设计
农夫约翰的农场上有 N 个山丘,每座山的高度都是整数。
在冬天,约翰经常在这些山上举办滑雪训练营。
不幸的是,从明年开始,国家将实行一个关于滑雪场的新税法。
如果滑雪场的最高峰与最低峰的高度差大于17,国家就要收税。
为了避免纳税,约翰决定对这些山峰的高度进行修整。
已知,增加或减少一座山峰 x 单位的高度,需要花费x^2的金钱。
约翰只愿意改变整数单位的高度。
请问,约翰最少需要花费多少钱,才能够使得最高峰与最低峰的高度差不大于17。
输入格式
第一行包含整数 N。
接下来 N行,每行包含一个整数,表示一座山的高度。
输出格式
输出一个整数,表示最少花费的金钱。
数据范围
1≤N≤1000
数据保证,每座山的初始高度都在 0∼100之间。
思路:
直接枚举最低山的高度即可,然后前后记录需要增加的高度,可以加个二分找到第一个比最高山的高度大的然后向后扫描记录 ,并更新答案
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
int n;
int []a=new int [1005];
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for(int i=0;i<n;i++) {
a[i]=sc.nextInt();
}
Arrays.sort(a,0,n);
int ans=0x3f3f3f3f;
int x;
int sum;
//枚举最低山的高度
for(int i=0;i<=100;i++) {
x=i;
sum=0;
for(int j=0;j<n;j++) {
if(a[j]<i)sum+=(a[j]-x)*(a[j]-x);
else break;
}
x=i+17;
for(int j=n-1;j>=0;j--) {
if(a[j]>x) sum+=(a[j]-x)*(a[j]-x);
else break;
}
ans=Math.min(ans,sum);
}
System.out.println(ans);
}
}
标题:寒假打卡——AcWing1353. 滑雪场设计
作者:xiaob0
地址:https://xiaobo.net.cn/articles/2021/01/25/1611581720104.html