当前位置: 代码迷 >> 综合 >> 2020 CCPC Wannafly Winter Camp Day6 Div.12——N.合并!【思维】
  详细解决方案

2020 CCPC Wannafly Winter Camp Day6 Div.12——N.合并!【思维】

热度:52   发布时间:2023-12-16 22:53:15.0

题目传送门


题目描述

有 ${n} 个石子堆,第 i {i} i 个在一开始有 a i a_i ai? 个石子。每次你可以选择两堆相邻的石子 a i , a i + 1 a_i,a_{i+1} ai?,ai+1? 合并,合并完之后得到的收益为 a i a i + 1 a_ia_{i+1} ai?ai+1?,两堆石子变成一堆有 a i + a j a_i+a_j ai?+aj? 个石子的堆。
你会一直进行合并操作,直到只剩下一堆石子为止。
求你能得到的最大的收益之和。


输入描述:

第一行一个正整数 n {n} n
第二行 n {n} n 个正整数,表示 a 1... n a_{1...n} a1...n?
1 ≤ n , a i ≤ 2000 1\leq n,a_i\leq 2000 1n,ai?2000


输出描述:

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


输入

3
1 2 3


输出

11


题解

  • 其实?论怎么进?合并,最后的答案?定是 a [ 1 … n ] a[1…n] a[1n] 两两的乘积之和

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;}
}