51Nod_2133 排队接水
http://www.51nod.com/Challenge/Problem.html#!#problemId=2133
题目
n个人一起排队接水,第i个人需要b[i]的时间来接水。1 <= n <= 1000,0 <= b[i] <= 1000。同时只能有一个人接水,正在接水的人和没有接水的人都需要等待。完成接水的人会立刻消失,不会继续等待。你可以决定所有人接水的顺序,并希望最小化所有人等待时间的总和。
输入
第一行一个整数n,接下来n行,每行一个整数表示b[i]
输出
一行一个整数,表示所有人等待时间的总和的最小值
样例输入
3
1
2
3
样例输出
10
分析
贪心,接水时间短的人先接水。
C++程序
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1010;
int a[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
long long sum=0;
sort(a,a+n);
for(int i=0;i<n;i++)
sum+=a[i]*(n-i);
printf("%lld\n",sum);
return 0;
}