一、题目信息
二、排序不等式
1、算法内容
2、算法证明
3、思路分析
这道题的话,打水的人所花的时间设为t,如果这个人后面有n个人,那么等待的时间总和就是nt。
因此,前面的系数n会随着人的减少而减少,构成了一个降序的序列。
而为了整体最小,根据排序不等式,我们需要把每个人的打水时间,升序排列。
三、代码实现
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e6+10;
int a[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",a+i);
}
sort(a+1,a+n+1);
long long sum=0;
for(int i=1;i<=n;i++)
{
sum+=(long long)a[i]*(n-i);
}
cout<<sum<<endl;
}