排序后,从大到小挨着合并就行了。
数学证明:
无论怎么合并,展开括号后,都有n*(n-1)/2项多项式,
且就是每个数分别乘其它各个数,除以2去重。
import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] v = new int[n]; for(int i = 0; i < n; ++i) v[i] = sc.nextInt(); Arrays.sort(v); int pre = v[n - 1], sum = 0; for(int i = n - 2; i >= 0; --i){ sum += pre*v[i]; pre += v[i]; } System.out.println(sum); } }