原题:http://poj.org/problem?id=2231
思路: dp[i]表示前i个location的Volume值,将输入数字排序,根据规律推出转移方程:dp[i]=dp[i-1]+(i-1)*2*(a[i]-a[i-1]);
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int cmp(const void *a,const void *b)
{
int aa=*(int*)a;
int bb=*(int*)b;
return aa-bb;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
ll sum=0;
ll a[10010];
ll dp[10010]={0};
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
qsort(a+1,n,sizeof(a[0]),cmp);
// for(int i=1;i<=n;i++)
// {
// printf("%lld ",a[i]);
// }
// printf("\n");
for(int i=2;i<=n;i++)
{
ll tmp=2*(a[i]-a[i-1]);
dp[i]=dp[i-1]+(i-1)*tmp;
sum=sum+dp[i];
}
printf("%lld\n",sum);
}
return 0;
}