题目描述
有 ${n} 个石子堆,第
个在一开始有
个石子。每次你可以选择两堆相邻的石子
合并,合并完之后得到的收益为
,两堆石子变成一堆有
个石子的堆。
你会一直进行合并操作,直到只剩下一堆石子为止。
求你能得到的最大的收益之和。
输入描述:
第一行一个正整数
第二行
个正整数,表示
输出描述:
输出一个数,表示能获得的最大收益
输入
3
1 2 3
输出
11
题解
- 其实⽆论怎么进⾏合并,最后的答案⼀定是 两两的乘积之和
AC-Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2005;
int a[maxn];
int main() {
int n;
while (cin >> n) {
for (int i = 1; i <= n; ++i)
cin >> a[i];
ll ans = 0;
for(int i = 1; i <= n; ++i)
for(int j = i+1; j <= n; ++j)
ans += a[i]*a[j];
cout << ans << endl;
}
}