在一行上输入两个整数
。
在第二行输入
个整数
。
输出一个整数,表示通过最优配对操作后小红能够获得的最大得分。
6 2 1 1 4 5 1 4
21
一种可行的最优方案如下:
选择
与
,得分
;
选择
与
,得分
;
最终总得分为
。
import java.util.Arrays;
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[] num = new int[n];
int count =0;
for(int i=0; i<n; i++){
num[i] = in.nextInt();
}
Arrays.sort(num);
for(int i= num.length-1; i>0; i=i-1){
if(num[i]- num[i-1] <=k){
count = count + num[i] * num[i-1];
num[i]=0;
num[i-1] =0;
// System.out.println("执行了乘法");
i = i-1;
}
}
System.out.println(count);
}
} import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[] an = new int[n];
for(int i=0;i<n;i++){
an[i] = in.nextInt();
}
Arrays.sort(an); // 从小到大排序,后续从后往前取最大元素
long sum = 0; // 改为long,防止数据溢出
// 从后往前遍历,优先配对最大和次大元素
for(int i = n-1; i > 0; i--){
// 满足条件则配对,累加乘积
if(an[i] - an[i-1] <= k){
sum += (long)an[i] * an[i-1]; // 强制转型,避免int相乘溢出
i--; // 跳过已配对的次大元素
}
}
System.out.println(sum);
}
}