


import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();// 石头块数
long h[] = new long[(int) n + 1];// 每一块石头高度
long s = 0;// 体力值
int j = 1;// 小青蛙将要跳到的石头
int k = (int) n;// 小青蛙当前所在的石头
int count = 0;
for (int i = 1; i <= n; i++) {
h[i] = sc.nextLong();
}
Arrays.sort(h);
// for (int i = 1; i <= n; i++) {
// System.out.print(h[i]+" ");//3 5 6
// }
s = s + h[(int) n] * h[(int) n];// 体力值首先应该加上跳到最高的石头上的体力值
while (j < k) {// 如果当前石头比将要跳到的石头高
count++;// 次数加1
s = s + (h[k] - h[j]) * (h[k] - h[j]);// 加上此次跳跃耗费的体力值
if (count % 2 == 1) {
k--;// 如果跳了奇数次,j就变成当前所在石头,下一个将要跳到的石头为k-1
} else {
j++;// 否则,k就是当前所在石头,下一个将要跳到的石头为j+1
}
}
System.out.println(s);// 输出最大体力值
}
}
本文详细解析了洛谷P2240题目,通过Java编程语言,利用贪心算法进行求解。通过对问题的深入理解,我们构建了有效的贪心策略,实现了高效的代码解决方案。
433

被折叠的 条评论
为什么被折叠?



