2020 CCPC Wannafly Winter Camp Day6 N 合并!

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

3
1 2 3

输出

11

题意:

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

比如先拿了 a i a_i ,之后合并和那一堆和相乘得到收益,实际上相当于 a i a_i 和其中每个数相乘求和,到最后 a i a_i 和每个数都乘了 1 1 次。这样想就是每个数都和别的数乘了 1 1 次。

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;
}
发布了704 篇原创文章 · 获赞 420 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_43627087/article/details/104556501