问题 A: 平板游戏
时间限制: 1 Sec 内存限制: 128 MB
题目描述
小黑和小白喜欢玩平板游戏,游戏一开始屏幕上会出现很多个图形,玩家在每一轮可以合并两个图形,当只有一个图形的时候游戏结束,每个图形都有一个大小,合并完成后的图形的大小为x+y,x和y分别为合并之前的两个图形,与此同时,玩家会获得x*y的分数。
小黑和小白新开了一盘游戏,屏幕上出现了n个图形,每个图形的大小已知,请算出小黑和小白最大能获得的分数
输入
第一行输入一个整数n (2 <= n <= 100 )
第二行输入n个整数范围在1到100之间
输出
输出一个整数,表示能获得的最高分
样例输入
【样例输入1】
3
1 2 3
【样例输入2】
2
3 4
【样例输入3】
3
2 2 2
样例输出
【样例输出1】
11
【样例输出2】
12
【样例输出3】
12
题解:一道水题。保险的做法是先sort排序后再用贪心合并。其实只要观察一下样例,就会发现
这题是一道恒等式。(不会证明)
贴上代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,d[110],i;
while(cin>>n)
{
for(i=1; i<=n; i++)cin>>d[i];
sort(d+1,d+1+n);
int sum=d[n];
long long ans=0;
for(i=n-1; i>=1; i--)
{
ans+=sum*d[i];
sum+=d[i];
}
cout<<ans<<endl;
}
}