题目描述

2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu 个石子堆,第 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_02 个在一开始有 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_03个石子。
每次你可以选择两堆相邻的石子 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_04 合并,合并完之后得到的收益为 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_05,两堆石子变成一堆有 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_06 个石子的堆。
你会一直进行合并操作,直到只剩下一堆石子为止。
求你能得到的最大的收益之和。

输入描述:

第一行一个正整数 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu
第二行 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu 个正整数,表示 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_09

输出描述:

输出一个数,表示能获得的最大收益

示例1

输入

3
1 2 3

输出

11

题意:

经典的石子合并问题,只不过加法变成的乘法,这样答案就是固定的了。

比如先拿了 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_03,之后合并和那一堆和相乘得到收益,实际上相当于 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_03 和其中每个数相乘求和,到最后 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_03 和每个数都乘了 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_13 次。这样想就是每个数都和别的数乘了 2020 CCPC Wannafly Winter Camp Day6  N	合并!_uuu_13

AC代码:

int n;
int a[2010];
ll ans;
int main()
{
sd(n);
rep(i, 1, n)
sd(a[i]);
ans = 0;
rep(i, 1, n)
{
rep(j, i + 1, n)
ans += a[i] * a[j];
}
pld(ans);
return 0;
}