链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
牛牛和牛妹喜欢玩平板游戏,游戏一开始屏幕上会出现很多个图形,玩家在每一轮可以合并两个图形,当只有一个图形的时候游戏结束,每个图形都有一个大小,合并完成后的图形的大小为x+y,x和y分别为合并之前的两个图形,与此同时,玩家会获得x*y的分数。
牛牛和牛妹新开了一盘游戏,屏幕上出现了n个图形,每个图形的大小已知,请算出牛牛和牛妹最大能获得的分数
输入描述:
第一行输入一个整数n (2≤n≤1002 \le n \le 1002≤n≤100) 第二行输入n个整数范围在1到100之间
输出描述:
输出一个整数
示例1
输入
3 1 2 3
输出
11
示例2
输入
2
2 3 4
输出
12
示例3
输入
3 2 2 2
输出
12
备注:
子任务1:n <= 10 子任务2:n <= 20 子任务3:无限制
直接上代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[100];
int t=0;
for(int i=0;i<n;i++){
cin>>a[i];
t+=a[i];//求和,方便下面的计算
}
sort(a,a+n);//将输入的数从小到大排序
int s=0;
for(int i=0;i<n-1;i++){
t-=a[i];
s+=a[i]*t;//从最小的数遍历到倒数第三个数,每次加上 该数*(该数之后所有数的和)
} //可以自己按照实例写下过程,便会发现该原理
cout<<s<<endl;
return 0;
}