Description
小黑和小白喜欢玩平板游戏,游戏一开始屏幕上会出现很多个图形,玩家在每一轮可以合并两个图形,当只有一个图形的时候游戏结束,每个图形都有一个大小,合并完成后的图形的大小为x+y,x和y分别为合并之前的两个图形,与此同时,玩家会获得x*y的分数。
小黑和小白新开了一盘游戏,屏幕上出现了n个图形,每个图形的大小已知,请算出小黑和小白最大能获得的分数
Input
第一行输入一个整数n (2 <= n <= 100 )
第二行输入n个整数范围在1到100之间
Output
输出一个整数,表示能获得的最高分
Sample Input
3
1 2 3
2
3 4
3
2 2 2
Sample Output
11
12
12
Hint
以n=3为例:
三个数分别为a,b,c;
分三种讨论:
1.sum=ab+(a+b)c=ab+ac+bc;
2.sum=ac+(a+c)b=ab+ac+bc;
3.sum=bc+(b+c)a=ab+bc+ac;
即三种情况的结果一样,其它情况也一样;
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int n,max=0;
while(scanf("%d",&n)!=EOF)
{
int a[n],sum=0,sum2=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
sum+=a[i]*a[j];
}
}
for(int i=0;i<n;i++)
{
sum2+=pow(a[i],2);
}
max=(sum-sum2)/2;
printf("%d\n",max);
}
return 0;
}