题目描述
小Q和牛博士在玩一个石子合并的游戏,初始一共有n堆石子,每堆石子有w[i]个石子。小Q和牛博士他们需要对石子堆进行合并,每次他们可以任意选择两堆石子进行合并。一堆有x个石子的石子堆和一堆有y个石子的石子堆合并将得到一堆x+y个石子的石子堆,这次合并得分为x*y,当只剩下一堆石子的时候游戏结束。
、小Q和牛博士希望采取优秀的策略获得最大得分,希望你能来帮他们算算最大得分多少。
输入描述:
输入包括两行,第一行一个正整数n(2≤n≤100)。 第二行包括n个正整数w[i](1≤w[i]≤100),即每堆石子的个数。输出描述:
输出一个正整数,即小Q和牛博士最大得分是多少。示例1
输入
复制
3 1 2 3输出
复制
11
这个题初一看,觉得需要遍历所有的可能,或者使用dp进行时间优化,觉得不好下手,但是看了别人的证明才发现不管什么组合得到的结果都一样:
所以只要按照输入的顺序计算即可:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int rs=0, a=0, b=0;
// b作为用来合并的堆,a是当前堆
// 1,2,3 a=1,rs=0,b=1,a=2,rs=2,b=3,a=3,rs=11,b=6
for (int i = 0; i < n; i++) {
a = in.nextInt();
rs += a * b;
b += a;
}
System.out.println(rs);
}
}