一道数学题哈,原本以为是动态规划,结果推出:
1.当 n = 3 时,对于 a,b,c,发现 a, b先合并 或 b, c先合并 结果均为 a*b + b*c + a*c
2.当 n = 4 时,对于 a,b,c,d,发现结果也均为 a*b + a*c + a*d + b*c + b*d + c*d
……
所以根据推到,得到AC代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int n;
int w[N];
LL sum[N], squ[N];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++ i)
{
scanf("%d", &w[i]);
sum[i] = sum[i - 1] + (LL)w[i];
squ[i] = squ[i - 1] + (LL)w[i] * w[i];
}
cout << ((sum[n] * sum[n]) - squ[n]) / 2 << endl;
return 0;
}